infocalypse

(djk)
2010-04-02: Patch from SomeDude to support zebra striped tables and

Patch from SomeDude to support zebra striped tables and <br> linebreaks. Patch CHK from FMS (applied against d8803001a744): CHK@dDHkhSymTZrE4jofpz~CIbFE1-fkHY2cdrVJk1vDTEQ,JNywg6uGffYiWIqGDbBLD02QBfUH7jIycMtux0aCuWQ,AAIC--8/tablestripe%2Epatch I modified <br> handling to only substitute '<br />' for the exact string '<br>' in wikitext.

diff --git a/fniki/piki.py b/fniki/piki.py
--- a/fniki/piki.py
+++ b/fniki/piki.py
@@ -545,6 +545,9 @@ class PageFormatter:
         self.list_indents = []
         self.in_pre = 0
         self.in_table = 0
+        self.table_striped = 0
+        self.table_stripe_cols = ["#ffffff","#f0f0f0"]
+        self.table_row_num = 0
 
     def _emph_repl(self, word):
         if len(word) == 3:
@@ -665,6 +668,8 @@ class PageFormatter:
             # start the table if we aren't inside one yet
             if self.in_table == 0:
                 self.in_table = 1
+                self.table_striped = 0
+                self.table_row_num = 0
                 rval = rval + '<table'
 
                 table_re = re.compile(
@@ -673,6 +678,7 @@ class PageFormatter:
                 + r"|(?P<tablewidth>\<tablewidth:(?P<widthval>\d+(%|px)?)\>)"
                 + r"|(?P<tableheight>\<tableheight:(?P<heightval>\d+(%|px)?)\>)"
                 + r"|(?P<collapse>\<collapse\>)"
+                + r"|(?P<stripe>\<stripe:(?P<stripecol1>#[0-9A-Fa-f]{6}),(?P<stripecol2>#[0-9A-Fa-f]{6})\>)"
                 + r")")
 
                 stylestr = ''
@@ -691,7 +697,13 @@ class PageFormatter:
             # start a new table row
             colspan = 1
             rowspan = 1
-            rval = rval + '<tr>'
+            rval = rval + '<tr'
+            if self.table_striped == 1:
+                if self.table_row_num % 2 == 0:
+                    rval = rval + ' style="background-color:' + self.table_stripe_cols[0] + ';"'
+                else:
+                    rval = rval + ' style="background-color:' + self.table_stripe_cols[1] + ';"'
+            rval = rval + '>'
             for line in word.split('||'):
                 if line == '':
                     colspan = colspan + 1
@@ -752,6 +764,7 @@ class PageFormatter:
                 rval = rval + '<td colspan="' + str(colspan-1) + '"></td>'
 
             rval = rval + '</tr>'
+            self.table_row_num = self.table_row_num + 1
             return rval
         elif self.in_table == 1:
             self.in_table = 0
@@ -779,7 +792,15 @@ class PageFormatter:
                     replaced = 'vertical-align:'+match.group('valignval')+';'
                 elif type == 'collapse':
                     replaced = 'border-collapse:collapse;'
+                elif type == 'stripe':
+                    self.table_striped = 1
+                    self.table_stripe_cols[0] = match.group('stripecol1')
+                    self.table_stripe_cols[1] = match.group('stripecol2')
+                    
         return replaced
+        
+    def _br_repl(self, word):
+        return '<br />'
 
     def _indent_level(self):
         return len(self.list_indents) and self.list_indents[-1]
@@ -815,6 +836,7 @@ class PageFormatter:
         # strings, outputting verbatim any intervening text
         scan_re = re.compile(
             r"(?:(?P<emph>'{2,3})"
+            + r"|(?P<br>\<br\>)"
             + r"|(?P<ent>[<>&])"
             + r"|(?P<anch>@@@([^@]+)@@@)"
             + r"|(?P<anchl>@@@@([^@]+)@@@@)"