Revision: 92ee5b961d05
Author:   Janne Härkönen <[email protected]>
Date:     Tue Dec 13 13:43:30 2011
Log: writer: replaces regexp-based html table writing with explicit start-end
http://code.google.com/p/robotframework/source/detail?r=92ee5b961d05

Modified:
 /src/robot/writer/htmltemplate.py
 /src/robot/writer/writer.py
 /utest/writer/golden.py

=======================================
--- /src/robot/writer/htmltemplate.py   Wed Dec  7 13:13:57 2011
+++ /src/robot/writer/htmltemplate.py   Tue Dec 13 13:43:30 2011
@@ -12,7 +12,7 @@
 #  See the License for the specific language governing permissions and
 #  limitations under the License.

-TEMPLATE = """
+TEMPLATE_START = """
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html>
 <head>
@@ -64,10 +64,7 @@
 </head>
 <body>
 <h1>%(NAME)s</h1>
-<table id="settings" border="1"></table>
-<table id="variables" border="1"></table>
-<table id="testcases" border="1"></table>
-<table id="keywords" border="1"></table>
-</body>
+"""
+TEMPLATE_END = """</body>
 </html>
 """
=======================================
--- /src/robot/writer/writer.py Tue Dec 13 05:25:10 2011
+++ /src/robot/writer/writer.py Tue Dec 13 13:43:30 2011
@@ -23,7 +23,7 @@
 from robot import utils

from .formatters import TsvFormatter, TxtFormatter, PipeFormatter, HtmlFormatter
-from .htmltemplate import TEMPLATE
+from .htmltemplate import TEMPLATE_START, TEMPLATE_END


 def FileWriter(serialization_context):
@@ -123,43 +123,40 @@
 class HtmlFileWriter(_DataFileWriter):

     def __init__(self, context):
-        self._content = TEMPLATE % {'NAME': context.datafile.name}
-        self._writer = utils.HtmlWriter(StringIO())
-        self._output = context.output
-        self._table_replacer = HtmlTableReplacer()
+        self._name = context.datafile.name
+        self._writer = utils.HtmlWriter(context.output)
         self._formatter = HtmlFormatter()

     def write(self, datafile):
+ self._writer.content(TEMPLATE_START % {'NAME': self._name}, escape=False)
         for table in datafile:
             if table:
+ self._writer.start('table', {'id': table.type, 'border': '1'})
                 self._write_header(table)
                 {'setting': self._write_settings,
                  'variable': self._write_variables,
                  'testcase': self._write_tests,
                  'keyword': self._write_keywords
                  }[table.type](table)
-        self._output.write(self._content.encode('UTF-8'))
+                self._write_empty_row()
+                self._writer.end('table')
+        self._writer.content(TEMPLATE_END, escape=False)

     def _write_settings(self, settings):
-        self._write_table(self._formatter.setting_rows(settings),
-                          self._table_replacer.settings_table)
+        self._write_table(self._formatter.setting_rows(settings))

     def _write_variables(self, variables):
-        self._write_table(self._formatter.variable_rows(variables),
-                          self._table_replacer.variables_table)
+        self._write_table(self._formatter.variable_rows(variables))

     def _write_tests(self, tests):
-        self._write_table(self._formatter.test_rows(tests),
-                          self._table_replacer.testcases_table)
+        self._write_table(self._formatter.test_rows(tests))

     def _write_keywords(self, keywords):
-        self._write_table(self._formatter.keyword_rows(keywords),
-                          self._table_replacer.keywords_table)
-
-    def _write_table(self, rows, replacer):
+        self._write_table(self._formatter.keyword_rows(keywords))
+
+    def _write_table(self, rows):
         for row in rows:
             self._write_row(row)
-        self._end_table(replacer)

     def _end_table(self, table_replacer):
         self._write_empty_row()
@@ -173,35 +170,3 @@
             self._writer.element(cell.tag, cell.content, cell.attributes,
                                  escape=False)
         self._writer.end('tr')
-
-
-class HtmlTableReplacer(object):
-    _table_re = '(<table\s[^>]*id=["\']?%s["\']?[^>]*>).*?(</table>)'
- _settings_re = re.compile(_table_re % 'settings', re.IGNORECASE | re.DOTALL) - _variables_re = re.compile(_table_re % 'variables', re.IGNORECASE | re.DOTALL) - _testcases_re = re.compile(_table_re % 'testcases', re.IGNORECASE | re.DOTALL) - _keywords_re = re.compile(_table_re % 'keywords', re.IGNORECASE | re.DOTALL)
-
-    def settings_table(self, table, content):
-        return self._table(self._settings_re, table, content)
-
-    def variables_table(self, table, content):
-        return self._table(self._variables_re, table, content)
-
-    def testcases_table(self, table, content):
-        return self._table(self._testcases_re, table, content)
-
-    def keywords_table(self, table, content):
-        return self._table(self._keywords_re, table, content)
-
-    def _table(self, table_re, table, content):
-        replaced = self._table_replacer(table)
-        return table_re.sub(replaced, content)
-
-    def _table_replacer(self, content):
-        content = content.strip()
-        def replace(match):
-            start, end = match.groups()
-            parts = content and [start, content, end] or [start, end]
-            return '\n'.join(parts)
-        return replace
=======================================
--- /utest/writer/golden.py     Fri Dec  9 05:38:16 2011
+++ /utest/writer/golden.py     Tue Dec 13 13:43:30 2011
@@ -173,7 +173,7 @@
 </head>
 <body>
 <h1>Here</h1>
-<table id="settings" border="1">
+<table border="1" id="setting">
 <tr>
 <th class="name" colspan="5">Settings</th>
 </tr>
@@ -234,7 +234,7 @@
 <td></td>
 </tr>
 </table>
-<table id="variables" border="1">
+<table border="1" id="variable">
 <tr>
 <th class="name" colspan="5">Variables</th>
 </tr>
@@ -267,7 +267,7 @@
 <td></td>
 </tr>
 </table>
-<table id="testcases" border="1">
+<table border="1" id="testcase">
 <tr>
 <th class="name" colspan="5">Test Cases</th>
 </tr>
@@ -305,7 +305,7 @@
 <td></td>
 </tr>
 </table>
-<table id="keywords" border="1">
+<table border="1" id="keyword">
 <tr>
 <th class="name" colspan="5">Keywords</th>
 </tr>

Reply via email to