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[] = "[EMAIL PROTECTED],.~/%&=:*#";
+#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();


_______________________________________________
Pkg-games-commits mailing list
[email protected]
http://lists.alioth.debian.org/mailman/listinfo/pkg-games-commits

Reply via email to