|
From: <mi...@us...> - 2021-10-04 08:36:16
|
Revision: 8840
http://sourceforge.net/p/docutils/code/8840
Author: milde
Date: 2021-10-04 08:36:11 +0000 (Mon, 04 Oct 2021)
Log Message:
-----------
Fix by Mickey Endito for source location (line number) of attributions.
New unittest case for the internal "source" and "line" attributes.
Modified Paths:
--------------
trunk/docutils/HISTORY.txt
trunk/docutils/docutils/parsers/rst/states.py
Added Paths:
-----------
trunk/docutils/test/test_parsers/test_rst/test_source_line.py
Modified: trunk/docutils/HISTORY.txt
===================================================================
--- trunk/docutils/HISTORY.txt 2021-10-03 07:43:01 UTC (rev 8839)
+++ trunk/docutils/HISTORY.txt 2021-10-04 08:36:11 UTC (rev 8840)
@@ -63,6 +63,11 @@
.. _LaTeX syntax for mathematics: docs/ref/rst/mathematics.html
+* docutils/parsers/rst/states.py:
+
+ - Fix source location (line number) for attribution elements.
+ Patch by Mickey Endito.
+
* docutils/transforms/references.py
- Skip system_messages when propagating targets. Fixes bug #425.
Modified: trunk/docutils/docutils/parsers/rst/states.py
===================================================================
--- trunk/docutils/docutils/parsers/rst/states.py 2021-10-03 07:43:01 UTC (rev 8839)
+++ trunk/docutils/docutils/parsers/rst/states.py 2021-10-04 08:36:11 UTC (rev 8840)
@@ -1181,7 +1181,7 @@
elements.append(blockquote)
if attribution_lines:
attribution, messages = self.parse_attribution(
- attribution_lines, attribution_offset)
+ attribution_lines, line_offset+attribution_offset)
blockquote += attribution
elements += messages
line_offset = new_line_offset
@@ -1251,7 +1251,7 @@
def parse_attribution(self, indented, line_offset):
text = '\n'.join(indented).rstrip()
- lineno = self.state_machine.abs_line_number() + line_offset
+ lineno = 1 + line_offset # line_offset is zero-based
textnodes, messages = self.inline_text(text, lineno)
node = nodes.attribution(text, '', *textnodes)
node.source, node.line = self.state_machine.get_source_and_line(lineno)
Added: trunk/docutils/test/test_parsers/test_rst/test_source_line.py
===================================================================
--- trunk/docutils/test/test_parsers/test_rst/test_source_line.py (rev 0)
+++ trunk/docutils/test/test_parsers/test_rst/test_source_line.py 2021-10-04 08:36:11 UTC (rev 8840)
@@ -0,0 +1,187 @@
+#! /usr/bin/env python
+# coding: utf-8
+# $Id$
+# Author: Günter Milde
+# Maintainer: doc...@li...
+# :Copyright: 2021 Günter Milde,
+# :License: Released under the terms of the `2-Clause BSD license`_, in short:
+#
+# Copying and distribution of this file, with or without modification,
+# are permitted in any medium without royalty provided the copyright
+# notice and this notice are preserved.
+# This file is offered as-is, without any warranty.
+#
+# .. _2-Clause BSD license: https://opensource.org/licenses/BSD-2-Clause
+
+"""Test internal source and line attributes (for correct error reporting).
+
+This test is to ensure source and line numbers are correct.
+It does not fix the API regarding which nodes have
+source and line attributes -- additional nodes may grow them,
+this is regarded a compatible feature additon.
+"""
+
+# Requires the `universal.ExposeInternals` transform (tested in
+# ``test_transforms/test_expose_internals.py``)
+# to make internal attributes visible.
+
+from __future__ import absolute_import
+import os
+
+if __name__ == '__main__':
+ import __init__
+from test_transforms import DocutilsTestSupport # before importing docutils!
+from docutils.transforms.universal import ExposeInternals
+from docutils.parsers.rst import Parser
+
+
+def suite():
+ parser = Parser()
+ s = DocutilsTestSupport.TransformTestSuite(
+ parser, suite_settings={'expose_internals': ['line', 'source']})
+ s.generateTests(totest)
+ return s
+
+mydir = 'test_parsers/test_rst/'
+include14 = os.path.join(mydir, 'includes/include14.txt')
+
+totest = {}
+
+totest['transitions'] = ((ExposeInternals,), [
+["""\
+Paragraph starting in line 1.
+With *inline* element in line 2.
+
+ Block quote in line 4
+
+ -- attribution
+ in line 6
+
+* bullet list in line 9
+* second item in line 10
+
+1. enumerated list in line 12
+""",
+"""\
+<document source="test data">
+ <paragraph internal:line="1" internal:source="test data">
+ Paragraph starting in line 1.
+ With \n\
+ <emphasis>
+ inline
+ element in line 2.
+ <block_quote internal:source="test data">
+ <paragraph internal:line="4" internal:source="test data">
+ Block quote in line 4
+ <attribution internal:line="6" internal:source="test data">
+ attribution
+ in line 6
+ <bullet_list bullet="*" internal:line="9" internal:source="test data">
+ <list_item internal:source="test data">
+ <paragraph internal:line="9" internal:source="test data">
+ bullet list in line 9
+ <list_item internal:source="test data">
+ <paragraph internal:line="10" internal:source="test data">
+ second item in line 10
+ <enumerated_list enumtype="arabic" internal:line="12" internal:source="test data" prefix="" suffix=".">
+ <list_item internal:source="test data">
+ <paragraph internal:line="12" internal:source="test data">
+ enumerated list in line 12
+"""],
+["""\
+Paragraph
+
+ Block quote in line 3
+
+ -- attribution in line 5
+""",
+"""\
+<document source="test data">
+ <paragraph internal:line="1" internal:source="test data">
+ Paragraph
+ <block_quote internal:source="test data">
+ <paragraph internal:line="3" internal:source="test data">
+ Block quote in line 3
+ <attribution internal:line="5" internal:source="test data">
+ attribution in line 5
+"""],
+["""\
+Paragraph
+
+ Block quote in line 3
+
+ nested block quote
+ in line 5
+
+ double nested quote in line 8
+
+ -- double-nested attribution in line 10
+
+ line 12
+
+ -- nested attribution in line 14
+
+ -- attribution in line 16
+""",
+"""\
+<document source="test data">
+ <paragraph internal:line="1" internal:source="test data">
+ Paragraph
+ <block_quote internal:source="test data">
+ <paragraph internal:line="3" internal:source="test data">
+ Block quote in line 3
+ <block_quote>
+ <paragraph internal:line="5" internal:source="test data">
+ nested block quote
+ in line 5
+ <block_quote>
+ <paragraph internal:line="8" internal:source="test data">
+ double nested quote in line 8
+ <attribution internal:line="10" internal:source="test data">
+ double-nested attribution in line 10
+ <paragraph internal:line="12" internal:source="test data">
+ line 12
+ <attribution internal:line="14" internal:source="test data">
+ nested attribution in line 14
+ <attribution internal:line="16" internal:source="test data">
+ attribution in line 16
+"""],
+["""\
+Paragraph
+
+.. include:: %s
+""" % include14,
+"""\
+<document source="test data">
+ <paragraph internal:line="1" internal:source="test data">
+ Paragraph
+ <paragraph internal:line="1" internal:source="test_parsers/test_rst/includes/include14.txt">
+ Paragraph starting in line 1.
+ With \n\
+ <emphasis>
+ inline
+ element in line 2.
+ <block_quote internal:source="test_parsers/test_rst/includes/include14.txt">
+ <paragraph internal:line="4" internal:source="test_parsers/test_rst/includes/include14.txt">
+ Block quote in line 4
+ <attribution internal:line="6" internal:source="test_parsers/test_rst/includes/include14.txt">
+ attribution
+ in line 6
+ <bullet_list bullet="*" internal:line="9" internal:source="test_parsers/test_rst/includes/include14.txt">
+ <list_item internal:source="test_parsers/test_rst/includes/include14.txt">
+ <paragraph internal:line="9" internal:source="test_parsers/test_rst/includes/include14.txt">
+ bullet list in line 9
+ <list_item internal:source="test_parsers/test_rst/includes/include14.txt">
+ <paragraph internal:line="10" internal:source="test_parsers/test_rst/includes/include14.txt">
+ second item in line 10
+ <enumerated_list enumtype="arabic" internal:line="12" internal:source="test_parsers/test_rst/includes/include14.txt" prefix="" suffix=".">
+ <list_item internal:source="internal padding after test_parsers/test_rst/includes/include14.txt">
+ <paragraph internal:line="12" internal:source="test_parsers/test_rst/includes/include14.txt">
+ enumerated list in line 12
+"""],
+])
+
+
+if __name__ == '__main__':
+ import unittest
+ unittest.main(defaultTest='suite')
Property changes on: trunk/docutils/test/test_parsers/test_rst/test_source_line.py
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Revision
\ No newline at end of property
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|