infocalypse

(djk)
2010-02-17: Patch from SomeDude to improve tables (vertical alignment, briefer

Patch from SomeDude to improve tables (vertical alignment, briefer colspan setting). Patch CHK from FMS (applied against 0ad7286d96a8): CHK@M0TFGlFE9hSnf-QFuYn32cLy5UVgircz4YHRjlpRnSY,tq5-4oK-yxkFdg4wUfV-pjCcYWdlsq8e7lCR~PklXNg,AAIC--8/table%2Epatch Note: Previous patch was applied against b561dc75c682 NOT 0ad7286d96a8.

diff --git a/fniki/piki.py b/fniki/piki.py
--- a/fniki/piki.py
+++ b/fniki/piki.py
@@ -692,15 +692,34 @@ class PageFormatter:
 
             # start a new table row
             colspan = 1
+            rowspan = 1
             rval = rval + '<tr>'
             for line in word.split('||'):
                 if line == '':
                     colspan = colspan + 1
                 else:
+                    
+                    span_re = re.compile(
+                    r"(?:(?P<colspan>\<-(?P<csval>\d+)\>)"
+                    + r"|(?P<rowspan>\<\|(?P<rsval>\d+)\>)"
+                    + r")")
+                    
+                    for match in span_re.finditer(line):
+                        for type, hit in match.groupdict().items():
+                            if hit:
+                                if type == 'colspan':
+                                    colspan = colspan + int(match.group('csval')) - 1
+                                elif type == 'rowspan':
+                                    rowspan = rowspan + int(match.group('rsval')) - 1
+                            
+                    line = re.sub(span_re,'',line)
+                
+                    rval = rval + '<td'
+                
                     if colspan > 1:
-                        rval = rval + '<td colspan="' + str(colspan) + '"'
-                    else:
-                        rval = rval + '<td'
+                        rval = rval + ' colspan="' + str(colspan) + '"'
+                    if rowspan > 1:
+                        rval = rval + ' rowspan="' + str(rowspan) + '"'
                         
                     td_re = re.compile(
                     r"(?:(?P<tdborder>\<border:(?P<borderval>\d+(%|px)?)\>)"
@@ -709,6 +728,7 @@ class PageFormatter:
                     + r"|(?P<tdheight>\<height:(?P<heightval>\d+(%|px)?)\>)"
                     + r"|(?P<tdbgcolor>\<bgcolor:(?P<bgcolorval>#[0-9A-Fa-f]{6})\>)"
                     + r"|(?P<tdalign>\<align:(?P<alignval>(left|center|right))\>)"
+                    + r"|(?P<tdvalign>\<valign:(?P<valignval>(top|middle|bottom))\>)"
                     + r")")
                     
                     stylestr = ''
@@ -728,6 +748,7 @@ class PageFormatter:
                     # is there a better way to do this??
                     rval = rval + PageFormatter(line).return_html() + '</td>'
                     colspan = 1
+                    rowspan = 1
 
             # end the current table row - make sure to close final td if one is open
             if colspan > 1:
@@ -757,6 +778,8 @@ class PageFormatter:
                     replaced = 'background-color:'+match.group('bgcolorval')+';'
                 elif type == 'tdalign':
                     replaced = 'text-align:'+match.group('alignval')+';'
+                elif type == 'tdvalign':
+                    replaced = 'vertical-align:'+match.group('valignval')+';'
                 elif type == 'collapse':
                     replaced = 'border-collapse:collapse;'
         return replaced