From: <go...@us...> - 2017-08-16 21:40:27
|
Revision: 8169 http://sourceforge.net/p/docutils/code/8169 Author: goodger Date: 2017-08-16 21:40:24 +0000 (Wed, 16 Aug 2017) Log Message: ----------- * docutils/parsers/rst/states.py: Allow embedded colons in field list field names (also updated docs/ref/rst/restructuredtext.txt). * docutils/parsers/rst/directives/html.py: [Fix for bug 281:] Allow backslash-escaped colons in meta directive field list field names (also updated docs/dev/todo.txt). * Added tests for the above. Modified Paths: -------------- trunk/docutils/HISTORY.txt trunk/docutils/docs/ref/rst/restructuredtext.txt trunk/docutils/docutils/parsers/rst/directives/html.py trunk/docutils/docutils/parsers/rst/states.py trunk/docutils/test/test_parsers/test_rst/test_directives/test_meta.py trunk/docutils/test/test_parsers/test_rst/test_field_lists.py Modified: trunk/docutils/HISTORY.txt =================================================================== --- trunk/docutils/HISTORY.txt 2017-08-16 21:30:43 UTC (rev 8168) +++ trunk/docutils/HISTORY.txt 2017-08-16 21:40:24 UTC (rev 8169) @@ -19,8 +19,18 @@ * General - Dropped support for Python 2.4, 2.5, 3.1, and 3.2. - - infrastructure automatisms. + - Infrastructure automation. +* docutils/parsers/rst/states.py: + + - Allow embedded colons in field list field names (also updated + docs/ref/rst/restructuredtext.txt). + +* docutils/parsers/rst/directives/html.py: + + - [Fix for bug 281:] Allow backslash-escaped colons in meta directive + field list field names (also updated docs/dev/todo.txt). + * docutils/writers/latex2e/__init__.py - Fix [ 323 ] don't add ``\phantomsection`` and whitespace to Modified: trunk/docutils/docs/ref/rst/restructuredtext.txt =================================================================== --- trunk/docutils/docs/ref/rst/restructuredtext.txt 2017-08-16 21:30:43 UTC (rev 8168) +++ trunk/docutils/docs/ref/rst/restructuredtext.txt 2017-08-16 21:40:24 UTC (rev 8169) @@ -830,7 +830,8 @@ Field lists are mappings from *field names* to *field bodies*, modeled on RFC822_ headers. A field name may consist of any characters, but -colons (":") inside of field names must be escaped with a backslash. +colons (":") inside of field names must be backslash-escaped +when followed by whitespace. Inline markup is parsed in field names. Field names are case-insensitive when further processed or transformed. The field name, along with a single colon prefix and suffix, together form the Modified: trunk/docutils/docutils/parsers/rst/directives/html.py =================================================================== --- trunk/docutils/docutils/parsers/rst/directives/html.py 2017-08-16 21:30:43 UTC (rev 8168) +++ trunk/docutils/docutils/parsers/rst/directives/html.py 2017-08-16 21:40:24 UTC (rev 8169) @@ -29,6 +29,7 @@ def parsemeta(self, match): name = self.parse_field_marker(match) + name = utils.unescape(utils.escape2null(name)) indented, indent, line_offset, blank_finish = \ self.state_machine.get_first_known_indented(match.end()) node = self.meta() @@ -36,7 +37,7 @@ {'component': 'writer', 'format': 'html', 'nodes': [node]}) - node['content'] = ' '.join(indented) + node['content'] = utils.unescape(utils.escape2null(' '.join(indented))) if not indented: line = self.state_machine.line msg = self.reporter.info( Modified: trunk/docutils/docutils/parsers/rst/states.py =================================================================== --- trunk/docutils/docutils/parsers/rst/states.py 2017-08-16 21:30:43 UTC (rev 8168) +++ trunk/docutils/docutils/parsers/rst/states.py 2017-08-16 21:40:24 UTC (rev 8169) @@ -1119,7 +1119,7 @@ patterns = { 'bullet': u'[-+*\u2022\u2023\u2043]( +|$)', 'enumerator': r'(%(parens)s|%(rparen)s|%(period)s)( +|$)' % pats, - 'field_marker': r':(?![: ])([^:\\]|\\.)*(?<! ):( +|$)', + 'field_marker': r':(?![: ])([^:\\]|\\.|:(?!([ `]|$)))*(?<! ):( +|$)', 'option_marker': r'%(option)s(, %(option)s)*( +| ?$)' % pats, 'doctest': r'>>>( +|$)', 'line_block': r'\|( +|$)', Modified: trunk/docutils/test/test_parsers/test_rst/test_directives/test_meta.py =================================================================== --- trunk/docutils/test/test_parsers/test_rst/test_directives/test_meta.py 2017-08-16 21:30:43 UTC (rev 8168) +++ trunk/docutils/test/test_parsers/test_rst/test_directives/test_meta.py 2017-08-16 21:40:24 UTC (rev 8169) @@ -222,6 +222,22 @@ <literal_block xml:space="preserve"> :name notattval: content """], +[r""" +.. meta:: + :name\:with\:colons: escaped line\ + break +""", +"""\ +<document source="test data"> + <pending> + .. internal attributes: + .transform: docutils.transforms.components.Filter + .details: + component: 'writer' + format: 'html' + nodes: + <meta content="escaped linebreak" name="name:with:colons"> +"""], ] Modified: trunk/docutils/test/test_parsers/test_rst/test_field_lists.py =================================================================== --- trunk/docutils/test/test_parsers/test_rst/test_field_lists.py 2017-08-16 21:30:43 UTC (rev 8168) +++ trunk/docutils/test/test_parsers/test_rst/test_field_lists.py 2017-08-16 21:40:24 UTC (rev 8169) @@ -542,6 +542,52 @@ <paragraph> A definition list, not a field list. """], +[r""" +:first: field +:field:name:with:embedded:colons: unambiguous, no need for escapes + +.. + +:embedded:colons: in first field name +:field:\`:name: not interpreted text +:field:\`name: not interpreted text +""", +"""\ +<document source="test data"> + <field_list> + <field> + <field_name> + first + <field_body> + <paragraph> + field + <field> + <field_name> + field:name:with:embedded:colons + <field_body> + <paragraph> + unambiguous, no need for escapes + <comment xml:space="preserve"> + <field_list> + <field> + <field_name> + embedded:colons + <field_body> + <paragraph> + in first field name + <field> + <field_name> + field:`:name + <field_body> + <paragraph> + not interpreted text + <field> + <field_name> + field:`name + <field_body> + <paragraph> + not interpreted text +"""], ] if __name__ == '__main__': This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |