[Aptitude-svn-commit] r3572 - in branches/aptitude-0.3/aptitude: . src/vscreen

Daniel Burrows dburrows@costa.debian.org
Sat, 02 Jul 2005 19:17:33 +0000


Author: dburrows
Date: Sat Jul  2 19:17:31 2005
New Revision: 3572

Modified:
   branches/aptitude-0.3/aptitude/ChangeLog
   branches/aptitude-0.3/aptitude/src/vscreen/columnify.cc
Log:
Fix the generation of column-formatted text.

Modified: branches/aptitude-0.3/aptitude/ChangeLog
==============================================================================
--- branches/aptitude-0.3/aptitude/ChangeLog	(original)
+++ branches/aptitude-0.3/aptitude/ChangeLog	Sat Jul  2 19:17:31 2005
@@ -1,5 +1,10 @@
 2005-07-02  Daniel Burrows  <dburrows@debian.org>
 
+	* src/vscreen/columnify.cc:
+
+	  Fix the algorithm that "renders" column-formatted text:
+	  due to a logic error, nothing at all was being produced.
+
 	* src/ui.cc:
 
 	  Instead of trying to pass a NULL string to pkg_tree::pkg_tree,

Modified: branches/aptitude-0.3/aptitude/src/vscreen/columnify.cc
==============================================================================
--- branches/aptitude-0.3/aptitude/src/vscreen/columnify.cc	(original)
+++ branches/aptitude-0.3/aptitude/src/vscreen/columnify.cc	Sat Jul  2 19:17:31 2005
@@ -141,19 +141,20 @@
 	    }
     }
 
-  int curwidth=0;
+  int curwidth=0, nextwidth=0;
   const int spacewidth=wcwidth(L' ');
   for(layout::iterator i=final_info.begin();
       i!=final_info.end(); ++i)
     {
       wstring::size_type amt=0;
-      for( ; curwidth<(i->width) &&
+      nextwidth+=i->width;
+      for( ; curwidth<nextwidth &&
 	     amt<i->info.text.size(); ++amt)
 	{
 	  wchar_t wch=i->info.text[amt];
 	  // Watch out for wide characters overrunning the column
 	  // boundary!
-	  if(curwidth+wcwidth(wch)<=i->width)
+	  if(curwidth+wcwidth(wch)<=nextwidth)
 	    {
 	      rval+=wch;
 	      curwidth+=wcwidth(wch);
@@ -162,7 +163,7 @@
 	    break;
 	}
       // Is it sane for spacewidth to ever differ from unity?
-      while(curwidth+spacewidth<i->width)
+      while(curwidth+spacewidth<=nextwidth)
 	{
 	  rval+=L' ';
 	  curwidth+=spacewidth;