[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 />&nbsp;<br />";
-			src += 2;
-		}
-		else if (*src <= ' ')
-		{
-			out_html += " ";
-			src++;
-		}
-		else
-		{
-			switch(*src)
-			{
-				case '<': out_html += "&lt;"; break;
-				case '>': out_html += "&gt;"; 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 />&nbsp;<br />";
+			src += 2;
+		}
+		else if (*src <= ' ')
+		{
+			out_html += " ";
+			src++;
+		}
+		else
+		{
+			switch(*src)
+			{
+				case '<': out_html += "&lt;"; break;
+				case '>': out_html += "&gt;"; 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