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