From: <mi...@us...> - 2017-11-04 09:40:29
|
Revision: 8194 http://sourceforge.net/p/docutils/code/8194 Author: milde Date: 2017-11-04 09:40:27 +0000 (Sat, 04 Nov 2017) Log Message: ----------- `Text.rstrip` and `Text.lstrip` now handle `rawsource` attribute. Modified Paths: -------------- trunk/docutils/HISTORY.txt trunk/docutils/docutils/nodes.py trunk/docutils/test/test_nodes.py Modified: trunk/docutils/HISTORY.txt =================================================================== --- trunk/docutils/HISTORY.txt 2017-11-04 09:27:41 UTC (rev 8193) +++ trunk/docutils/HISTORY.txt 2017-11-04 09:40:27 UTC (rev 8194) @@ -26,6 +26,10 @@ - Document rST syntax change: Tokens like ``:this:example:`` are now valid field list names (instead of ordinary text). +* docutils/nodes.py + + - `Text.rstrip` and `Text.lstrip` now handle `rawsource` attribute. + * docutils/parsers/rst/states.py: - Allow embedded colons in field list field names. Modified: trunk/docutils/docutils/nodes.py =================================================================== --- trunk/docutils/docutils/nodes.py 2017-11-04 09:27:41 UTC (rev 8193) +++ trunk/docutils/docutils/nodes.py 2017-11-04 09:40:27 UTC (rev 8194) @@ -304,8 +304,6 @@ def __repr__(self): return unicode.__repr__(self)[1:] - - else: reprunicode = unicode @@ -344,7 +342,6 @@ return reprunicode.__new__(cls, data) def __init__(self, data, rawsource=''): - self.rawsource = rawsource """The raw text from which this element was constructed.""" @@ -387,13 +384,17 @@ # rstrip and lstrip are used by substitution definitions where # they are expected to return a Text instance, this was formerly - # taken care of by UserString. Note that then and now the - # rawsource member is lost. + # taken care of by UserString. def rstrip(self, chars=None): - return self.__class__(reprunicode.rstrip(self, chars)) + node = self.__class__(reprunicode.rstrip(self, chars)) + node.rawsource = self.rawsource.rstrip((chars or ' \n\t\r')+'\\') + return node def lstrip(self, chars=None): - return self.__class__(reprunicode.lstrip(self, chars)) + node = self.__class__(reprunicode.lstrip(self, chars)) + node.rawsource = re.sub(ur'^(\\?[%s])+'%(chars or ' \n\t\r'), u'', + self.rawsource) + return node class Element(Node): @@ -447,7 +448,7 @@ """List attributes, automatically initialized to empty lists for all nodes.""" - known_attributes = list_attributes + ('source',) + known_attributes = list_attributes + ('source', 'rawsource') """List attributes that are known to the Element base class.""" tagname = None @@ -459,8 +460,11 @@ def __init__(self, rawsource='', *children, **attributes): self.rawsource = rawsource - """The raw text from which this element was constructed.""" + """The raw text from which this element was constructed. + NOTE: some elements do not set this value (default ''). + """ + self.children = [] """List of child nodes (elements and/or `Text`).""" Modified: trunk/docutils/test/test_nodes.py =================================================================== --- trunk/docutils/test/test_nodes.py 2017-11-04 09:27:41 UTC (rev 8193) +++ trunk/docutils/test/test_nodes.py 2017-11-04 09:40:27 UTC (rev 8194) @@ -54,6 +54,15 @@ self.assertTrue(isinstance(self.text.pformat(), unicode)) self.assertEqual(self.text.pformat(), u'Line 1.\nLine 2.\n') + def test_strip(self): + text = nodes.Text(' was noch ', ' \was\ noch \\ ') + stripped = text.lstrip().rstrip() + stripped2 = text.lstrip(' wahn').rstrip(' wahn') + self.assertEqual(stripped, u'was noch') + self.assertEqual(stripped.rawsource, u'\was\\ noch') + self.assertEqual(stripped2, u's noc') + self.assertEqual(stripped2.rawsource, u's\\ noc') + def test_asciirestriction(self): if sys.version_info < (3,): self.assertRaises(UnicodeDecodeError, nodes.Text, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |