[SCM] Development for GoFind! branch, master, updated. 94e5470b123fb7bec2fb143dce8cf5a50be36ca0
Miriam Ruiz
miriam at debian.org
Wed May 6 01:03:29 UTC 2009
The following commit has been merged in the master branch:
commit 94e5470b123fb7bec2fb143dce8cf5a50be36ca0
Author: Miriam Ruiz <miriam at debian.org>
Date: Wed May 6 03:08:31 2009 +0200
Package descriptions are now properly translated. It's a pity that FLTK1.1 doesn't support UTF8
diff --git a/apthelper.cpp b/apthelper.cpp
index 388ca20..b3ad31c 100644
--- a/apthelper.cpp
+++ b/apthelper.cpp
@@ -143,7 +143,7 @@ AptHelper::~AptHelper()
Init = false;
}
-bool AptHelper::GetPackageInfo(const char *package_name, AptHelper::PackageInfo *info)
+bool AptHelper::GetPackageInfo(const std::string &package_name, AptHelper::PackageInfo *info)
{
info->Clean();
@@ -158,7 +158,7 @@ bool AptHelper::GetPackageInfo(const char *package_name, AptHelper::PackageInfo
pkgCache::PkgIterator Pkg = Cache.FindPkg(package_name);
if (Pkg.end() == true)
{
- _error->Warning(_("Unable to locate package %s"), package_name);
+ _error->Warning(_("Unable to locate package %s"), package_name.c_str());
return _error->Error(_("No packages found"));;
}
@@ -202,12 +202,12 @@ bool AptHelper::GetPackageInfo(const char *package_name, AptHelper::PackageInfo
return _error->Error(_("No packages found"));
}
-bool AptHelper::ShowPackage(const char *package)
+bool AptHelper::ShowPackage(const std::string &package_name)
{
PackageInfo info;
- if (!GetPackageInfo(package, &info))
+ if (!GetPackageInfo(package_name, &info))
return false;
- cout << "Description"
+ std::cout << "Description"
<< ( (strcmp(info.LanguageCode.c_str(),"") != 0) ? "-" : "" ) << info.LanguageCode
<< ": " << info.ShortDescription << std::endl << info.LongDescription << std::endl;
return true;
diff --git a/apthelper.h b/apthelper.h
index 125ec5b..e5e6302 100644
--- a/apthelper.h
+++ b/apthelper.h
@@ -47,8 +47,8 @@ public:
~AptHelper();
inline bool IsInit() { return Init; }
- bool GetPackageInfo(const char *package_name, PackageInfo *info);
- bool ShowPackage(const char *package);
+ bool GetPackageInfo(const std::string &package_name, PackageInfo *info);
+ bool ShowPackage(const std::string &package_name);
static int LocalityCompare(const void *a, const void *b);
diff --git a/fltk/pkgbrowser.cpp b/fltk/pkgbrowser.cpp
index 9f6d5a9..a76955d 100644
--- a/fltk/pkgbrowser.cpp
+++ b/fltk/pkgbrowser.cpp
@@ -84,61 +84,6 @@ PackageBrowser::~PackageBrowser()
}
}
-static const char legalchars[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz at _?+-,.~/%&=:*#";
-
-static void text2html(const std::string &in_text, std::string &out_html)
-{
- const char *text = in_text.c_str();
- const char *src = text;
- //out_html.erase();
- while (*src)
- {
- if (!strncasecmp("http:", src, 5) || !strncasecmp("mailto:", src, 7) ||
- !strncasecmp("ftp:", src, 4) || !strncasecmp("https:", src, 6))
- {
- std::string uri, uri_text;
- for (; *src && (strchr(legalchars, *src) || (*src & 128)); src++)
- {
- uri += *src;
- uri_text += *src;
- if (*src == '/')
- uri_text += "<wbr>";
- }
- if (strchr(".?!", src[-1])) { // Probably the end of a sentence
- --src;
- uri.resize(uri.size() - 1);
- uri_text.resize(uri_text.size() - 1);
- }
- out_html += "<a href=\"";
- out_html += uri;
- out_html += "\">";
- out_html += uri_text;
- out_html += "</a>";
- }
- else if (!strncasecmp(" .\n", src, 3))
- {
- out_html += "<br /> <br />";
- src += 2;
- }
- else if (*src <= ' ')
- {
- out_html += " ";
- src++;
- }
- else
- {
- switch(*src)
- {
- case '<': out_html += "<"; break;
- case '>': out_html += ">"; break;
- default:
- out_html += *src;
- }
- src++;
- }
- }
-}
-
void PackageBrowser::item_select(void *p, int s)
{
VersatileBrowser::item_select(p, s);
@@ -211,8 +156,15 @@ void PackageBrowser::item_select(void *p, int s)
pkg_desc = std::string ("<center><h1><a href=\"pkg:") + rec.package() + "\">" + rec.package() +
"</a></h1></center><br />";
- pkg_desc += std::string("<center>") + rec.shortDescription() + "</center><hr /><p>";
- text2html(rec.longDescription(), pkg_desc);
+
+ std::string shortdesc, htmldesc;
+ if (pkgdata.GetPackageHTMLDesc(rec.package(), shortdesc, htmldesc))
+ {
+ pkg_desc += std::string("<center>") + shortdesc + "</center><hr /><p>" + htmldesc;
+ } else {
+ pkg_desc += std::string("<center>") + rec.shortDescription() + "</center><hr /><p>";
+ PackageData::Text2HTML(rec.longDescription(), pkg_desc);
+ }
ui.InfoView->value(pkg_desc.c_str());
static int widths[] = { 150, 0 }; // widths for each column
diff --git a/gofind.cpp b/gofind.cpp
index 6670303..b0413b4 100644
--- a/gofind.cpp
+++ b/gofind.cpp
@@ -105,7 +105,7 @@ int main(int argc, const char* argv[])
gui_plugin.Init(argc, argv);
gui_plugin.Comment(_("Starting system"));
- PackageData pkgdata;
+ PackageData pkgdata(argc, argv);
if (wibble::str::endsWith(argv[0], "learn") || opts.gowhere->stringValue() == "learn")
pkgdata.AppTemplate("learn");
diff --git a/gui_fltk.cpp b/gui_fltk.cpp
index 7e62412..56fc7c7 100644
--- a/gui_fltk.cpp
+++ b/gui_fltk.cpp
@@ -154,8 +154,17 @@ static void UpdateUILists(GamesUI& ui)
char fmtstr[16];
snprintf(fmtstr, sizeof(fmtstr), "@B%d at C%d at .", bk, fr);
- std::string desc = std::string(fmtstr) + rec.package() + "\t" +
- std::string(fmtstr) + rec.shortDescription();
+ std::string desc;
+ std::string shortdesc;
+ if (pkgdata.GetPackageShortDesc(rec.package(), shortdesc))
+ {
+ desc = std::string(fmtstr) + rec.package() + "\t" +
+ std::string(fmtstr) + shortdesc;
+ } else {
+ desc = std::string(fmtstr) + rec.package() + "\t" +
+ std::string(fmtstr) + rec.shortDescription();
+ }
+
if (pkgdata.popcon().hasData() && i->popcon)
{
desc += "\t" + std::string(fmtstr);
@@ -278,7 +287,7 @@ static bool Go(PackageData &pkgdata)
UpdateUILists(mainui);
int argc = 1;
- const char *argv[32] = { "test", NULL };
+ const char *argv[32] = { "GoFind!", NULL };
window->show(argc, (char**)argv);
while (Fl::wait());
diff --git a/pkgdata.cpp b/pkgdata.cpp
index 65943a7..bd35ebf 100644
--- a/pkgdata.cpp
+++ b/pkgdata.cpp
@@ -26,6 +26,7 @@
#include "Environment.h"
#include "GamesOptions.h"
#include "pkgdata.h"
+#include "apthelper.h"
#include <ept/apt/packagerecord.h>
#include <wibble/regexp.h>
@@ -38,12 +39,14 @@
#include <string.h>
-PackageData::PackageData()
+PackageData::PackageData(int argc,const char *argv[]) : apt_helper(NULL)
{
+ apt_helper = new AptHelper(argc, argv);
}
PackageData::~PackageData()
{
+ if (apt_helper) delete apt_helper;
}
bool PackageData::AppTemplate(const char *id)
@@ -97,6 +100,89 @@ bool PackageData::AppTemplate(const char *id)
return true;
}
+static const char legalchars[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz at _?+-,.~/%&=:*#";
+
+void PackageData::Text2HTML(const std::string &in_text, std::string &out_html)
+{
+ const char *text = in_text.c_str();
+ const char *src = text;
+ //out_html.erase();
+ while (*src)
+ {
+ if (!strncasecmp("http:", src, 5) || !strncasecmp("mailto:", src, 7) ||
+ !strncasecmp("ftp:", src, 4) || !strncasecmp("https:", src, 6))
+ {
+ std::string uri, uri_text;
+ for (; *src && (strchr(legalchars, *src) || (*src & 128)); src++)
+ {
+ uri += *src;
+ uri_text += *src;
+ if (*src == '/')
+ uri_text += "<wbr>";
+ }
+ if (strchr(".?!", src[-1])) { // Probably the end of a sentence
+ --src;
+ uri.resize(uri.size() - 1);
+ uri_text.resize(uri_text.size() - 1);
+ }
+ out_html += "<a href=\"";
+ out_html += uri;
+ out_html += "\">";
+ out_html += uri_text;
+ out_html += "</a>";
+ }
+ else if (!strncasecmp(" .\n", src, 3))
+ {
+ out_html += "<br /> <br />";
+ src += 2;
+ }
+ else if (*src <= ' ')
+ {
+ out_html += " ";
+ src++;
+ }
+ else
+ {
+ switch(*src)
+ {
+ case '<': out_html += "<"; break;
+ case '>': out_html += ">"; break;
+ default:
+ out_html += *src;
+ }
+ src++;
+ }
+ }
+}
+
+bool PackageData::GetPackageShortDesc(const std::string &pkgname, std::string &shortdesc)
+{
+ if (!apt_helper || !apt_helper->IsInit()) return false;
+ AptHelper::PackageInfo info;
+ if (!apt_helper->GetPackageInfo(pkgname, &info))
+ return false;
+ shortdesc = info.ShortDescription;
+ return true;
+}
+
+bool PackageData::GetPackageHTMLDesc(const std::string &pkgname, std::string &shortdesc, std::string &html)
+{
+ if (!apt_helper || !apt_helper->IsInit()) return false;
+
+ AptHelper::PackageInfo info;
+ if (!apt_helper->GetPackageInfo(pkgname, &info))
+ return false;
+
+ std::cout << "Description"
+ << ( (strcmp(info.LanguageCode.c_str(),"") != 0) ? "-" : "" ) << info.LanguageCode
+ << ": " << info.ShortDescription << std::endl << info.LongDescription << std::endl;
+
+ shortdesc = info.ShortDescription;
+ Text2HTML(info.LongDescription, html);
+
+ return true;
+}
+
char *PackageData::TagString(const Tag& tag)
{
static std::map<std::string, char*> table;
diff --git a/pkgdata.h b/pkgdata.h
index b2ec76b..a174122 100644
--- a/pkgdata.h
+++ b/pkgdata.h
@@ -30,10 +30,12 @@
using namespace ept;
+class AptHelper;
+
class PackageData : public Engine
{
public:
- PackageData();
+ PackageData(int argc,const char *argv[]);
~PackageData();
typedef ept::debtags::Tag Tag;
@@ -41,10 +43,15 @@ class PackageData : public Engine
bool AppTemplate(const char *id);
+ bool GetPackageShortDesc(const std::string &pkgname, std::string &shortdesc);
+ bool GetPackageHTMLDesc(const std::string &pkgname, std::string &shortdesc, std::string &html);
+
char *TagString(const Tag& tag);
char *PackageString(const std::string& name);
void PrintResults();
+ static void Text2HTML(const std::string &in_text, std::string &out_html);
+
PackageFilter &GetPackageFilter()
{
return pkgfilter;
@@ -52,6 +59,7 @@ class PackageData : public Engine
protected:
PackageFilter pkgfilter;
+ AptHelper *apt_helper;
};
#endif // _GOFIND_PACKAGEDATA_H
--
Development for GoFind!
More information about the Pkg-games-commits
mailing list