r3258 - software/ui/src

Miriam Ruiz baby-guest at alioth.debian.org
Fri Jul 6 19:36:41 UTC 2007


Author: baby-guest
Date: 2007-07-06 19:36:41 +0000 (Fri, 06 Jul 2007)
New Revision: 3258

Modified:
   software/ui/src/pkgbrowser.cpp
Log:
converted description to html



Modified: software/ui/src/pkgbrowser.cpp
===================================================================
--- software/ui/src/pkgbrowser.cpp	2007-07-06 17:03:37 UTC (rev 3257)
+++ software/ui/src/pkgbrowser.cpp	2007-07-06 19:36:41 UTC (rev 3258)
@@ -54,6 +54,9 @@
 using namespace ept::apt;
 using namespace ept::textsearch;
 
+static const char legalchars[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz at _?+-,.~/%&=:*#";
+#define SIZE_URI 256
+
 PackageBrowser::PackageBrowser(int x, int y, int w, int h, const char *l)
 	: VersatileBrowser(x, y, w, h, l), num_bar_images(2)
 {
@@ -79,6 +82,46 @@
 	}
 }
 
+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))
+		{
+			char uri[SIZE_URI];
+			int i;
+			for (i = 0; *src && (strchr(legalchars, *src) || *src < 0) && i < SIZE_URI-1; i++)
+				uri[i] = *src++;
+			if (strchr(".?!", uri[i-1])) { --i; --src; } // Probably the end of a sentence
+			uri[i] = 0;
+			out_html += "<a href=\"";
+			out_html += uri;
+			out_html += "\">";
+			out_html += uri;
+			out_html += "</a>";
+		}
+		else if (!strncasecmp(" .\n", src, 3))
+		{
+			out_html += "<br />&nbsp;<br />";
+			src += 2;
+		}
+		else if (*src <= ' ')
+		{
+			out_html += " ";
+			src++;
+		}
+		else
+		{
+			out_html += *src;
+			src++;
+		}
+	}
+}
+
 void PackageBrowser::item_select(void *p, int s)
 {
 	VersatileBrowser::item_select(p, s);
@@ -143,18 +186,15 @@
 
 			PackageRecord rec(ui->engine->apt().rawRecord((const char *)data));
 
-			char *pkg_txt = new char[4096];
+			std::string pkg_desc;
 			if (ui)
 			{
-				snprintf(pkg_txt, 4096, "<center><h1><a href=\"pkg:%s\">%s</a></h1></center><br /><center>%s</center><hr /><p>%s</p>",
-					rec.package().c_str(),
-					rec.package().c_str(),
-					rec.shortDescription().c_str(),
-					rec.longDescription().c_str()
-				);
-				ui->InfoView->value(pkg_txt);
+				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);
+				ui->InfoView->value(pkg_desc.c_str());
 			}
-			delete [] pkg_txt;
 
 			static int widths[] = { 150, 0 }; // widths for each column
 			ui->DebTagsBrowser->clear();




More information about the Pkg-games-commits mailing list