From: <mi...@us...> - 2013-01-21 16:14:17
|
Revision: 7593 http://docutils.svn.sourceforge.net/docutils/?rev=7593&view=rev Author: milde Date: 2013-01-21 16:14:10 +0000 (Mon, 21 Jan 2013) Log Message: ----------- Fix [ 3600051 ] for tables in a list, table cells are not compacted. Modified Paths: -------------- trunk/docutils/HISTORY.txt trunk/docutils/docutils/writers/html4css1/__init__.py Modified: trunk/docutils/HISTORY.txt =================================================================== --- trunk/docutils/HISTORY.txt 2013-01-21 15:19:18 UTC (rev 7592) +++ trunk/docutils/HISTORY.txt 2013-01-21 16:14:10 UTC (rev 7593) @@ -16,10 +16,18 @@ Changes Since 0.10 ================== +* docutils/nodes.py + + - Fix [ 3601607 ] node.__repr__() must return `str` instance. + * docutils/utils/__init__.py - Fix [ 3596884 ] exception importing ``docutils.io``. +* docutils/writers/html4css1/__init__.py + + - Fix [ 3600051 ] for tables in a list, table cells are not compacted. + * docutils/writers/latex2e/__init__.py - Drop the simple algorithm replacing straight double quotes with Modified: trunk/docutils/docutils/writers/html4css1/__init__.py =================================================================== --- trunk/docutils/docutils/writers/html4css1/__init__.py 2013-01-21 15:19:18 UTC (rev 7592) +++ trunk/docutils/docutils/writers/html4css1/__init__.py 2013-01-21 16:14:10 UTC (rev 7593) @@ -307,7 +307,7 @@ self.context = [] self.topic_classes = [] self.colspecs = [] - self.compact_p = 1 + self.compact_p = True self.compact_simple = False self.compact_field_list = False self.in_docinfo = False @@ -1228,7 +1228,7 @@ raise nodes.SkipNode # append to document body if tag: - self.body.append(self.starttag(node, tag, + self.body.append(self.starttag(node, tag, suffix='\n'*bool(math_env), CLASS=clsarg)) self.body.append(math_code) @@ -1331,13 +1331,13 @@ if (isinstance(node.parent, nodes.document) or isinstance(node.parent, nodes.compound)): # Never compact paragraphs in document or compound. - return 0 + return False for key, value in node.attlist(): if (node.is_not_default(key) and not (key == 'classes' and value in ([], ['first'], ['last'], ['first', 'last']))): # Attribute which needs to survive. - return 0 + return False first = isinstance(node.parent[0], nodes.label) # skip label for child in node.parent.children[first:]: # only first paragraph can be compact @@ -1345,14 +1345,14 @@ continue if child is node: break - return 0 + return False parent_length = len([n for n in node.parent if not isinstance( n, (nodes.Invisible, nodes.label))]) if ( self.compact_simple or self.compact_field_list or self.compact_p and parent_length == 1): - return 1 - return 0 + return True + return False def visit_paragraph(self, node): if self.should_be_compact_paragraph(node): @@ -1536,11 +1536,14 @@ self.body.append('</div>\n') def visit_table(self, node): + self.context.append(self.compact_p) + self.compact_p = True classes = ' '.join(['docutils', self.settings.table_style]).strip() self.body.append( self.starttag(node, 'table', CLASS=classes, border="1")) def depart_table(self, node): + self.compact_p = self.context.pop() self.body.append('</table>\n') def visit_target(self, node): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mi...@us...> - 2013-01-21 17:14:25
|
Revision: 7594 http://docutils.svn.sourceforge.net/docutils/?rev=7594&view=rev Author: milde Date: 2013-01-21 17:14:17 +0000 (Mon, 21 Jan 2013) Log Message: ----------- Apply [ 3599485 ] node source/line information for sphinx translation. Modified Paths: -------------- trunk/docutils/HISTORY.txt trunk/docutils/docutils/parsers/rst/directives/images.py Modified: trunk/docutils/HISTORY.txt =================================================================== --- trunk/docutils/HISTORY.txt 2013-01-21 16:14:10 UTC (rev 7593) +++ trunk/docutils/HISTORY.txt 2013-01-21 17:14:17 UTC (rev 7594) @@ -20,6 +20,10 @@ - Fix [ 3601607 ] node.__repr__() must return `str` instance. +* docutils/parsers/rst/directives/images.py + + - Apply [ 3599485 ] node source/line information for sphinx translation. + * docutils/utils/__init__.py - Fix [ 3596884 ] exception importing ``docutils.io``. Modified: trunk/docutils/docutils/parsers/rst/directives/images.py =================================================================== --- trunk/docutils/docutils/parsers/rst/directives/images.py 2013-01-21 16:14:10 UTC (rev 7593) +++ trunk/docutils/docutils/parsers/rst/directives/images.py 2013-01-21 17:14:17 UTC (rev 7594) @@ -149,6 +149,8 @@ if isinstance(first_node, nodes.paragraph): caption = nodes.caption(first_node.rawsource, '', *first_node.children) + caption.source = first_node.source + caption.line = first_node.line figure_node += caption elif not (isinstance(first_node, nodes.comment) and len(first_node) == 0): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mi...@us...> - 2013-01-21 17:34:03
|
Revision: 7595 http://docutils.svn.sourceforge.net/docutils/?rev=7595&view=rev Author: milde Date: 2013-01-21 17:33:56 +0000 (Mon, 21 Jan 2013) Log Message: ----------- Apply [ 2714873 ] Fix for the overwritting of document attributes. Modified Paths: -------------- trunk/docutils/HISTORY.txt trunk/docutils/docutils/nodes.py trunk/docutils/docutils/transforms/frontmatter.py trunk/docutils/test/test_nodes.py trunk/docutils/test/test_transforms/test_doctitle.py Modified: trunk/docutils/HISTORY.txt =================================================================== --- trunk/docutils/HISTORY.txt 2013-01-21 17:14:17 UTC (rev 7594) +++ trunk/docutils/HISTORY.txt 2013-01-21 17:33:56 UTC (rev 7595) @@ -16,6 +16,10 @@ Changes Since 0.10 ================== +* General + + - Apply [ 2714873 ] Fix for the overwritting of document attributes. + * docutils/nodes.py - Fix [ 3601607 ] node.__repr__() must return `str` instance. Modified: trunk/docutils/docutils/nodes.py =================================================================== --- trunk/docutils/docutils/nodes.py 2013-01-21 17:14:17 UTC (rev 7594) +++ trunk/docutils/docutils/nodes.py 2013-01-21 17:33:56 UTC (rev 7595) @@ -432,10 +432,24 @@ This is equivalent to ``element.extend([node1, node2])``. """ - list_attributes = ('ids', 'classes', 'names', 'dupnames', 'backrefs') + basic_attributes = ('ids', 'classes', 'names', 'dupnames') + """List attributes which are defined for every Element-derived class + instance and can be safely transferred to a different node.""" + + local_attributes = ('backrefs',) + """A list of class-specific attributes that should not be copied with the + standard attributes when replacing a node. + + NOTE: Derived classes should override this value to prevent any of its + attributes being copied by adding to the value in its parent class.""" + + list_attributes = basic_attributes + local_attributes """List attributes, automatically initialized to empty lists for all nodes.""" + known_attributes = list_attributes + ('source',) + """List attributes that are known to the Element base class.""" + tagname = None """The element generic identifier. If None, it is set as an instance attribute to the name of the class.""" @@ -680,18 +694,232 @@ else: return 1 - def update_basic_atts(self, dict): + def update_basic_atts(self, dict_): """ Update basic attributes ('ids', 'names', 'classes', - 'dupnames', but not 'source') from node or dictionary `dict`. + 'dupnames', but not 'source') from node or dictionary `dict_`. """ - if isinstance(dict, Node): - dict = dict.attributes - for att in ('ids', 'classes', 'names', 'dupnames'): - for value in dict.get(att, []): - if not value in self[att]: - self[att].append(value) + if isinstance(dict_, Node): + dict_ = dict_.attributes + for att in self.basic_attributes: + self.append_attr_list(att, dict_.get(att, [])) + def append_attr_list(self, attr, values): + """ + For each element in values, if it does not exist in self[attr], append + it. + + NOTE: Requires self[attr] and values to be sequence type and the + former should specifically be a list. + """ + # List Concatenation + for value in values: + if not value in self[attr]: + self[attr].append(value) + + def coerce_append_attr_list(self, attr, value): + """ + First, convert both self[attr] and value to a non-string sequence + type; if either is not already a sequence, convert it to a list of one + element. Then call append_attr_list. + + NOTE: self[attr] and value both must not be None. + """ + # List Concatenation + if not isinstance(self.get(attr), list): + self[attr] = [self[attr]] + if not isinstance(value, list): + value = [value] + self.append_attr_list(attr, value) + + def replace_attr(self, attr, value, force = True): + """ + If self[attr] does not exist or force is True or omitted, set + self[attr] to value, otherwise do nothing. + """ + # One or the other + if force or self.get(attr) is None: + self[attr] = value + + def copy_attr_convert(self, attr, value, replace = True): + """ + If attr is an attribute of self, set self[attr] to + [self[attr], value], otherwise set self[attr] to value. + + NOTE: replace is not used by this function and is kept only for + compatibility with the other copy functions. + """ + if self.get(attr) is not value: + self.coerce_append_attr_list(attr, value) + + def copy_attr_coerce(self, attr, value, replace): + """ + If attr is an attribute of self and either self[attr] or value is a + list, convert all non-sequence values to a sequence of 1 element and + then concatenate the two sequence, setting the result to self[attr]. + If both self[attr] and value are non-sequences and replace is True or + self[attr] is None, replace self[attr] with value. Otherwise, do + nothing. + """ + if self.get(attr) is not value: + if isinstance(self.get(attr), list) or \ + isinstance(value, list): + self.coerce_append_attr_list(attr, value) + else: + self.replace_attr(attr, value, replace) + + def copy_attr_concatenate(self, attr, value, replace): + """ + If attr is an attribute of self and both self[attr] and value are + lists, concatenate the two sequences, setting the result to + self[attr]. If either self[attr] or value are non-sequences and + replace is True or self[attr] is None, replace self[attr] with value. + Otherwise, do nothing. + """ + if self.get(attr) is not value: + if isinstance(self.get(attr), list) and \ + isinstance(value, list): + self.append_attr_list(attr, value) + else: + self.replace_attr(attr, value, replace) + + def copy_attr_consistent(self, attr, value, replace): + """ + If replace is True or selfpattr] is None, replace self[attr] with + value. Otherwise, do nothing. + """ + if self.get(attr) is not value: + self.replace_attr(attr, value, replace) + + def update_all_atts(self, dict_, update_fun = copy_attr_consistent, + replace = True, and_source = False): + """ + Updates all attributes from node or dictionary `dict_`. + + Appends the basic attributes ('ids', 'names', 'classes', + 'dupnames', but not 'source') and then, for all other attributes in + dict_, updates the same attribute in self. When attributes with the + same identifier appear in both self and dict_, the two values are + merged based on the value of update_fun. Generally, when replace is + True, the values in self are replaced or merged with the values in + dict_; otherwise, the values in self may be preserved or merged. When + and_source is True, the 'source' attribute is included in the copy. + + NOTE: When replace is False, and self contains a 'source' attribute, + 'source' is not replaced even when dict_ has a 'source' + attribute, though it may still be merged into a list depending + on the value of update_fun. + NOTE: It is easier to call the update-specific methods then to pass + the update_fun method to this function. + """ + if isinstance(dict_, Node): + dict_ = dict_.attributes + + # Include the source attribute when copying? + if and_source: + filter_fun = self.is_not_list_attribute + else: + filter_fun = self.is_not_known_attribute + + # Copy the basic attributes + self.update_basic_atts(dict_) + + # Grab other attributes in dict_ not in self except the + # (All basic attributes should be copied already) + for att in filter(filter_fun, dict_): + update_fun(self, att, dict_[att], replace) + + def update_all_atts_consistantly(self, dict_, replace = True, + and_source = False): + """ + Updates all attributes from node or dictionary `dict_`. + + Appends the basic attributes ('ids', 'names', 'classes', + 'dupnames', but not 'source') and then, for all other attributes in + dict_, updates the same attribute in self. When attributes with the + same identifier appear in both self and dict_ and replace is True, the + values in self are replaced with the values in dict_; otherwise, the + values in self are preserved. When and_source is True, the 'source' + attribute is included in the copy. + + NOTE: When replace is False, and self contains a 'source' attribute, + 'source' is not replaced even when dict_ has a 'source' + attribute, though it may still be merged into a list depending + on the value of update_fun. + """ + self.update_all_atts(dict_, Element.copy_attr_consistent, replace, + and_source) + + def update_all_atts_concatenating(self, dict_, replace = True, + and_source = False): + """ + Updates all attributes from node or dictionary `dict_`. + + Appends the basic attributes ('ids', 'names', 'classes', + 'dupnames', but not 'source') and then, for all other attributes in + dict_, updates the same attribute in self. When attributes with the + same identifier appear in both self and dict_ whose values aren't each + lists and replace is True, the values in self are replaced with the + values in dict_; if the values from self and dict_ for the given + identifier are both of list type, then the two lists are concatenated + and the result stored in self; otherwise, the values in self are + preserved. When and_source is True, the 'source' attribute is + included in the copy. + + NOTE: When replace is False, and self contains a 'source' attribute, + 'source' is not replaced even when dict_ has a 'source' + attribute, though it may still be merged into a list depending + on the value of update_fun. + """ + self.update_all_atts(dict_, Element.copy_attr_concatenate, replace, + and_source) + + def update_all_atts_coercion(self, dict_, replace = True, + and_source = False): + """ + Updates all attributes from node or dictionary `dict_`. + + Appends the basic attributes ('ids', 'names', 'classes', + 'dupnames', but not 'source') and then, for all other attributes in + dict_, updates the same attribute in self. When attributes with the + same identifier appear in both self and dict_ whose values are both + not lists and replace is True, the values in self are replaced with + the values in dict_; if either of the values from self and dict_ for + the given identifier are of list type, then first any non-lists are + converted to 1-element lists and then the two lists are concatenated + and the result stored in self; otherwise, the values in self are + preserved. When and_source is True, the 'source' attribute is + included in the copy. + + NOTE: When replace is False, and self contains a 'source' attribute, + 'source' is not replaced even when dict_ has a 'source' + attribute, though it may still be merged into a list depending + on the value of update_fun. + """ + self.update_all_atts(dict_, Element.copy_attr_coerce, replace, + and_source) + + def update_all_atts_convert(self, dict_, and_source = False): + """ + Updates all attributes from node or dictionary `dict_`. + + Appends the basic attributes ('ids', 'names', 'classes', + 'dupnames', but not 'source') and then, for all other attributes in + dict_, updates the same attribute in self. When attributes with the + same identifier appear in both self and dict_ then first any non-lists + are converted to 1-element lists and then the two lists are + concatenated and the result stored in self; otherwise, the values in + self are preserved. When and_source is True, the 'source' attribute + is included in the copy. + + NOTE: When replace is False, and self contains a 'source' attribute, + 'source' is not replaced even when dict_ has a 'source' + attribute, though it may still be merged into a list depending + on the value of update_fun. + """ + self.update_all_atts(dict_, Element.copy_attr_convert, + and_source = and_source) + def clear(self): self.children = [] @@ -721,7 +949,7 @@ else: # `update` is a Text node or `new` is an empty list. # Assert that we aren't losing any attributes. - for att in ('ids', 'names', 'classes', 'dupnames'): + for att in self.basic_attributes: assert not self[att], \ 'Losing "%s" attribute: %s' % (att, self[att]) self.parent.replace(self, new) @@ -805,7 +1033,23 @@ assert id is not None by_id.referenced = 1 + @classmethod + def is_not_list_attribute(cls, attr): + """ + Returns True if and only if the given attribute is NOT one of the + basic list attributes defined for all Elements. + """ + return attr not in cls.list_attributes + @classmethod + def is_not_known_attribute(cls, attr): + """ + Returns True if and only if the given attribute is NOT recognized by + this class. + """ + return attr not in cls.known_attributes + + class TextElement(Element): """ Modified: trunk/docutils/docutils/transforms/frontmatter.py =================================================================== --- trunk/docutils/docutils/transforms/frontmatter.py 2013-01-21 17:14:17 UTC (rev 7594) +++ trunk/docutils/docutils/transforms/frontmatter.py 2013-01-21 17:33:56 UTC (rev 7595) @@ -49,13 +49,24 @@ `node` is normally a document. """ + # Type check + if not isinstance(node, nodes.Element): + raise TypeError, 'node must be of Element-derived type.' + # `node` must not have a title yet. assert not (len(node) and isinstance(node[0], nodes.title)) section, index = self.candidate_index(node) if index is None: return None + # Transfer the section's attributes to the node: - node.attributes.update(section.attributes) + # NOTE: Change second parameter to False to NOT replace + # attributes that already exist in node with those in + # section + # NOTE: Remove third parameter to NOT copy the 'source' + # attribute from section + node.update_all_atts_concatenating(section, True, True) + # setup_child is called automatically for all nodes. node[:] = (section[:1] # section title + node[:index] # everything that was in the @@ -81,18 +92,23 @@ <subtitle> ... """ + # Type check + if not isinstance(node, nodes.Element): + raise TypeError, 'node must be of Element-derived type.' + subsection, index = self.candidate_index(node) if index is None: return None subtitle = nodes.subtitle() - # Transfer the subsection's attributes to the new subtitle: - # This causes trouble with list attributes! To do: Write a - # test case which catches direct access to the `attributes` - # dictionary and/or write a test case which shows problems in - # this particular case. - subtitle.attributes.update(subsection.attributes) - # We're losing the subtitle's attributes here! To do: Write a - # test case which shows this behavior. + + # Transfer the subsection's attributes to the new subtitle + # NOTE: Change second parameter to False to NOT replace + # attributes that already exist in node with those in + # section + # NOTE: Remove third parameter to NOT copy the 'source' + # attribute from section + subtitle.update_all_atts_concatenating(subsection, True, True) + # Transfer the contents of the subsection's title to the # subtitle: subtitle[:] = subsection[0][:] Modified: trunk/docutils/test/test_nodes.py =================================================================== --- trunk/docutils/test/test_nodes.py 2013-01-21 17:14:17 UTC (rev 7594) +++ trunk/docutils/test/test_nodes.py 2013-01-21 17:33:56 UTC (rev 7595) @@ -166,6 +166,117 @@ # 'test' is not overwritten because it is not a basic attribute. self.assertEqual(element1['test'], ['test1']) + def test_update_all_atts(self): + # Note: Also tests is_not_list_attribute and is_not_known_attribute + # and various helpers + ## Test for full attribute replacement + element1 = nodes.Element(ids=['foo', 'bar'], parent_only='parent', + all_nodes='mom') + element2 = nodes.Element(ids=['baz', 'qux'], child_only='child', + all_nodes='dad', source='source') + + # Test for when same fields are replaced as well as source... + element1.update_all_atts_consistantly(element2, True, True) + # 'ids' are appended because 'ids' is a basic attribute. + self.assertEquals(element1['ids'], ['foo', 'bar', 'baz', 'qux']) + # 'parent_only' should remain unaffected. + self.assertEquals(element1['parent_only'], 'parent') + # 'all_nodes' is overwritten due to the second parameter == True. + self.assertEquals(element1['all_nodes'], 'dad') + # 'child_only' should have been added. + self.assertEquals(element1['child_only'], 'child') + # 'source' is also overwritten due to the third parameter == True. + self.assertEquals(element1['source'], 'source') + + # Test for when same fields are replaced but not source... + element1 = nodes.Element(ids=['foo', 'bar'], parent_only='parent', + all_nodes='mom') + element1.update_all_atts_consistantly(element2) + # 'ids' are appended because 'ids' is a basic attribute. + self.assertEquals(element1['ids'], ['foo', 'bar', 'baz', 'qux']) + # 'parent_only' should remain unaffected. + self.assertEquals(element1['parent_only'], 'parent') + # 'all_nodes' is overwritten due to the second parameter default of True. + self.assertEquals(element1['all_nodes'], 'dad') + # 'child_only' should have been added. + self.assertEquals(element1['child_only'], 'child') + # 'source' remains unset due to the third parameter default of False. + self.assertEquals(element1.get('source'), None) + + # Test for when fields are NOT replaced but source is... + element1 = nodes.Element(ids=['foo', 'bar'], parent_only='parent', + all_nodes='mom') + element1.update_all_atts_consistantly(element2, False, True) + # 'ids' are appended because 'ids' is a basic attribute. + self.assertEquals(element1['ids'], ['foo', 'bar', 'baz', 'qux']) + # 'parent_only' should remain unaffected. + self.assertEquals(element1['parent_only'], 'parent') + # 'all_nodes' is preserved due to the second parameter == False. + self.assertEquals(element1['all_nodes'], 'mom') + # 'child_only' should have been added. + self.assertEquals(element1['child_only'], 'child') + # 'source' is added due to the third parameter == True. + self.assertEquals(element1['source'], 'source') + element1 = nodes.Element(source='destination') + element1.update_all_atts_consistantly(element2, False, True) + # 'source' remains unchanged due to the second parameter == False. + self.assertEquals(element1['source'], 'destination') + + # Test for when same fields are replaced but not source... + element1 = nodes.Element(ids=['foo', 'bar'], parent_only='parent', + all_nodes='mom') + element1.update_all_atts_consistantly(element2, False) + # 'ids' are appended because 'ids' is a basic attribute. + self.assertEquals(element1['ids'], ['foo', 'bar', 'baz', 'qux']) + # 'parent_only' should remain unaffected. + self.assertEquals(element1['parent_only'], 'parent') + # 'all_nodes' is preserved due to the second parameter == False. + self.assertEquals(element1['all_nodes'], 'mom') + # 'child_only' should have been added. + self.assertEquals(element1['child_only'], 'child') + # 'source' remains unset due to the third parameter default of False. + self.assertEquals(element1.get('source'), None) + + ## Test for List attribute merging + # Attribute Concatination + element1 = nodes.Element(ss='a', sl='1', ls=['I'], ll=['A']) + element2 = nodes.Element(ss='b', sl=['2'], ls='II', ll=['B']) + element1.update_all_atts_concatenating(element2) + # 'ss' is replaced because non-list + self.assertEquals(element1['ss'], 'b') + # 'sl' is replaced because they are both not lists + self.assertEquals(element1['sl'], ['2']) + # 'ls' is replaced because they are both not lists + self.assertEquals(element1['ls'], 'II') + # 'll' is extended because they are both lists + self.assertEquals(element1['ll'], ['A', 'B']) + + # Attribute Coercion + element1 = nodes.Element(ss='a', sl='1', ls=['I'], ll=['A']) + element2 = nodes.Element(ss='b', sl=['2'], ls='II', ll=['B']) + element1.update_all_atts_coercion(element2) + # 'ss' is replaced because non-list + self.assertEquals(element1['ss'], 'b') + # 'sl' is converted to a list and appended because element2 has a list + self.assertEquals(element1['sl'], ['1', '2']) + # 'ls' has element2's value appended to the list + self.assertEquals(element1['ls'], ['I', 'II']) + # 'll' is extended because they are both lists + self.assertEquals(element1['ll'], ['A', 'B']) + + # Attribute Conversion + element1 = nodes.Element(ss='a', sl='1', ls=['I'], ll=['A']) + element2 = nodes.Element(ss='b', sl=['2'], ls='II', ll=['B']) + element1.update_all_atts_convert(element2) + # 'ss' is converted to a list with the values from each element + self.assertEquals(element1['ss'], ['a', 'b']) + # 'sl' is converted to a list and appended + self.assertEquals(element1['sl'], ['1', '2']) + # 'ls' has element2's value appended to the list + self.assertEquals(element1['ls'], ['I', 'II']) + # 'll' is extended + self.assertEquals(element1['ll'], ['A', 'B']) + def test_replace_self(self): parent = nodes.Element(ids=['parent']) child1 = nodes.Element(ids=['child1']) Modified: trunk/docutils/test/test_transforms/test_doctitle.py =================================================================== --- trunk/docutils/test/test_transforms/test_doctitle.py 2013-01-21 17:14:17 UTC (rev 7594) +++ trunk/docutils/test/test_transforms/test_doctitle.py 2013-01-21 17:33:56 UTC (rev 7595) @@ -10,9 +10,24 @@ from __init__ import DocutilsTestSupport from docutils.transforms.frontmatter import DocTitle, SectionSubTitle -from docutils.parsers.rst import Parser +from docutils.parsers.rst import Parser, Directive +from docutils.parsers.rst.directives import register_directive +# dummy directive to test attribute merging: +class AddNameToDocumentTitle(Directive): + required_arguments = 0 + optional_arguments = 0 + final_argument_whitespace = True + option_spec = { } + has_content = False + def run(self): + document = self.state_machine.document + document['names'].append('Name') + return [] + +register_directive('add-name-to-title', AddNameToDocumentTitle) + def suite(): parser = Parser() s = DocutilsTestSupport.TransformTestSuite(parser) @@ -221,6 +236,25 @@ <subtitle ids="another-subtitle" names="another\ subtitle"> Another Subtitle """], +["""\ +----- +Title +----- + +This is a document, it flows nicely, so the attributes of it are at the +bottom. + +.. add-name-to-title:: + +""", +"""\ +<document ids="title" names="Name title" source="test data" title="Title"> + <title> + Title + <paragraph> + This is a document, it flows nicely, so the attributes of it are at the + bottom. +"""] ]) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mi...@us...> - 2013-02-13 13:16:09
|
Revision: 7602 http://docutils.svn.sourceforge.net/docutils/?rev=7602&view=rev Author: milde Date: 2013-02-13 13:16:01 +0000 (Wed, 13 Feb 2013) Log Message: ----------- Fix [ 3603246 ] Bug in option "--graphicx-option=auto". Modified Paths: -------------- trunk/docutils/HISTORY.txt trunk/docutils/docutils/writers/latex2e/__init__.py Modified: trunk/docutils/HISTORY.txt =================================================================== --- trunk/docutils/HISTORY.txt 2013-02-12 21:24:37 UTC (rev 7601) +++ trunk/docutils/HISTORY.txt 2013-02-13 13:16:01 UTC (rev 7602) @@ -42,6 +42,7 @@ English typographic ones. Activate the SmartQuotes_ transform if you want this feature. - Fix literal use of babel shorthands (straight quote, tilde, ...). + - Fix [ 3603246 ] Bug in option "--graphicx-option=auto". .. _SmartQuotes: docs/user/config.html#smart-quotes Modified: trunk/docutils/docutils/writers/latex2e/__init__.py =================================================================== --- trunk/docutils/docutils/writers/latex2e/__init__.py 2013-02-12 21:24:37 UTC (rev 7601) +++ trunk/docutils/docutils/writers/latex2e/__init__.py 2013-02-13 13:16:01 UTC (rev 7602) @@ -555,7 +555,7 @@ \usepackage{graphicx} \else \usepackage[pdftex]{graphicx} -\fi'))""" +\fi""" PreambleCmds.highlight_rules = r"""% basic code highlight: \providecommand*\DUrolecomment[1]{\textcolor[rgb]{0.40,0.40,0.40}{#1}} @@ -782,7 +782,7 @@ 0x00b3: ur'\textthreesuperior{}', # ³ SUPERSCRIPT THREE 0x00b4: ur'\textasciiacute{}', # ´ ACUTE ACCENT 0x00b5: ur'\textmu{}', # µ MICRO SIGN - 0x00b6: ur'\textparagraph{}', # ¶ PILCROW SIGN # not equal to \textpilcrow + 0x00b6: ur'\textparagraph{}', # ¶ PILCROW SIGN # != \textpilcrow 0x00b9: ur'\textonesuperior{}', # ¹ SUPERSCRIPT ONE 0x00ba: ur'\textordmasculine{}', # º MASCULINE ORDINAL INDICATOR 0x00bc: ur'\textonequarter{}', # 1/4 FRACTION @@ -790,7 +790,7 @@ 0x00be: ur'\textthreequarters{}', # 3/4 FRACTION 0x00d7: ur'\texttimes{}', # × MULTIPLICATION SIGN 0x00f7: ur'\textdiv{}', # ÷ DIVISION SIGN - # + # others 0x0192: ur'\textflorin{}', # LATIN SMALL LETTER F WITH HOOK 0x02b9: ur'\textasciiacute{}', # MODIFIER LETTER PRIME 0x02ba: ur'\textacutedbl{}', # MODIFIER LETTER DOUBLE PRIME This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mi...@us...> - 2013-02-18 21:22:29
|
Revision: 7610 http://docutils.svn.sourceforge.net/docutils/?rev=7610&view=rev Author: milde Date: 2013-02-18 21:22:20 +0000 (Mon, 18 Feb 2013) Log Message: ----------- Support embedded aliases within hyperlink references. Modified Paths: -------------- trunk/docutils/HISTORY.txt trunk/docutils/docs/ref/rst/restructuredtext.txt trunk/docutils/docutils/parsers/rst/states.py trunk/docutils/test/test_parsers/test_rst/test_inline_markup.py trunk/docutils/test/test_transforms/test_hyperlinks.py Modified: trunk/docutils/HISTORY.txt =================================================================== --- trunk/docutils/HISTORY.txt 2013-02-18 20:45:21 UTC (rev 7609) +++ trunk/docutils/HISTORY.txt 2013-02-18 21:22:20 UTC (rev 7610) @@ -19,6 +19,7 @@ * General - Apply [ 2714873 ] Fix for the overwritting of document attributes. + - Support embedded aliases within hyperlink references. * docutils/nodes.py Modified: trunk/docutils/docs/ref/rst/restructuredtext.txt =================================================================== --- trunk/docutils/docs/ref/rst/restructuredtext.txt 2013-02-18 20:45:21 UTC (rev 7609) +++ trunk/docutils/docs/ref/rst/restructuredtext.txt 2013-02-18 21:22:20 UTC (rev 7610) @@ -1862,7 +1862,8 @@ .. _link: underscore\_ It is possible (although not generally recommended) to include URIs - directly within hyperlink references. See `Embedded URIs`_ below. + directly within hyperlink references. See `Embedded URIs and Aliases`_ + below. 3. _`Indirect hyperlink targets` have a hyperlink reference in their link blocks. In the following example, target "one" indirectly @@ -1891,6 +1892,9 @@ .. _split: `A Hyperlink`_ + It is possible to include an alias directly within hyperlink + references. See `Embedded URIs and Aliases`_ below. + If the reference name contains any colons, either: - the phrase must be enclosed in backquotes:: @@ -2649,24 +2653,30 @@ hyperlinks. -Embedded URIs -````````````` +Embedded URIs and Aliases +````````````````````````` -A hyperlink reference may directly embed a target URI inline, within -angle brackets ("<...>") as follows:: +A hyperlink reference may directly embed a target URI or a hyperlink +reference within angle brackets ("<...>") as follows:: See the `Python home page <http://www.python.org>`_ for info. + This `link <Python home page_>`_ is an alias to the link above. + This is exactly equivalent to:: See the `Python home page`_ for info. + This link_ is an alias to the link above. + .. _Python home page: http://www.python.org + .. _link: `Python home page`_ The bracketed URI must be preceded by whitespace and be the last text -before the end string. With a single trailing underscore, the -reference is named and the same target URI may be referred to again. +before the end string. +With a single trailing underscore, the reference is named and the same +target URI may be referred to again. With two trailing underscores, the reference and target are both anonymous, and the target cannot be referred to again. These are "one-off" hyperlinks. For example:: @@ -2682,10 +2692,19 @@ __ http://www.rfc-editor.org/rfc/rfc2396.txt __ http://www.rfc-editor.org/rfc/rfc2732.txt -If reference text happens to end with angle-bracketed text that is -*not* a URI, the open-angle-bracket needs to be backslash-escaped. -For example, here is a reference to a title describing a tag:: +If a target URI happens to end with an underscore, this needs to be +backslash-escaped to avoid being parsed as hyperlink reference. For +example :: + Use the `source <parrots.txt\_>`__. + +creates an anonymous reference to the file ``parrots.txt_``. + +If the reference text happens to end with angle-bracketed text that is +*not* a URI or hyperlink reference, the open-angle-bracket needs to be +backslash-escaped. For example, here is a reference to a title +describing a tag:: + See `HTML Element: \<a>`_ below. The reference text may also be omitted, in which case the URI will be Modified: trunk/docutils/docutils/parsers/rst/states.py =================================================================== --- trunk/docutils/docutils/parsers/rst/states.py 2013-02-18 20:45:21 UTC (rev 7609) +++ trunk/docutils/docutils/parsers/rst/states.py 2013-02-18 21:22:20 UTC (rev 7610) @@ -608,13 +608,14 @@ ) %(end_string_suffix)s """ % locals(), re.VERBOSE | re.UNICODE), - embedded_uri=re.compile( + embedded_link=re.compile( r""" ( (?:[ \n]+|^) # spaces or beginning of line/string < # open bracket %(non_whitespace_after)s - ([^<>\x00]+) # anything but angle brackets & nulls + ([^<>\x00]+(\x00_)?) # anything but angle brackets & nulls + # except escaped trailing low line %(non_whitespace_before)s > # close bracket w/o whitespace before ) @@ -787,41 +788,63 @@ return string[:matchstart], [prb], string[matchend:], [msg] def phrase_ref(self, before, after, rawsource, escaped, text): - match = self.patterns.embedded_uri.search(escaped) - if match: + match = self.patterns.embedded_link.search(escaped) + if match: # embedded <URI> or <alias_> text = unescape(escaped[:match.start(0)]) - uri_text = match.group(2) - uri = ''.join(uri_text.split()) - uri = self.adjust_uri(uri) - if uri: - target = nodes.target(match.group(1), refuri=uri) + aliastext = unescape(match.group(2), restore_backslashes=True) + if aliastext.endswith('_') and not aliastext.endswith(r'\_'): + aliastype = 'name' + alias = normalize_name(aliastext[:-1]) + target = nodes.target(match.group(1), refname=alias) + target.indirect_reference_name = aliastext[:-1] + else: + aliastype = 'uri' + alias = ''.join(aliastext.split()) + alias = self.adjust_uri(alias) + if alias.endswith(r'\_'): + alias = alias[:-2] + '_' + target = nodes.target(match.group(1), refuri=alias) target.referenced = 1 - else: - raise ApplicationError('problem with URI: %r' % uri_text) + if not aliastext: + raise ApplicationError('problem with embedded link: %r' + % aliastext) if not text: - text = uri + text = alias else: target = None + refname = normalize_name(text) reference = nodes.reference(rawsource, text, name=whitespace_normalize_name(text)) node_list = [reference] + if rawsource[-2:] == '__': - if target: - reference['refuri'] = uri + if target and (aliastype == 'name'): + reference['refname'] = alias + self.document.note_refname(reference) + # self.document.note_indirect_target(target) # required? + elif target and (aliastype == 'uri'): + reference['refuri'] = alias else: reference['anonymous'] = 1 else: if target: - reference['refuri'] = uri target['names'].append(refname) - self.document.note_explicit_target(target, self.parent) + if aliastype == 'name': + reference['refname'] = alias + self.document.note_indirect_target(target) + self.document.note_refname(reference) + else: + reference['refuri'] = alias + self.document.note_explicit_target(target, self.parent) + # target.note_referenced_by(name=refname) node_list.append(target) else: reference['refname'] = refname self.document.note_refname(reference) return before, node_list, after, [] + def adjust_uri(self, uri): match = self.patterns.email.match(uri) if match: Modified: trunk/docutils/test/test_parsers/test_rst/test_inline_markup.py =================================================================== --- trunk/docutils/test/test_parsers/test_rst/test_inline_markup.py 2013-02-18 20:45:21 UTC (rev 7609) +++ trunk/docutils/test/test_parsers/test_rst/test_inline_markup.py 2013-02-18 21:22:20 UTC (rev 7610) @@ -1037,8 +1037,93 @@ <reference name="anonymous" refuri="anonymous"> anonymous """], +["""\ +Escape trailing low-line char in URIs: + +`<reference\_>`_ + +`<anonymous\_>`__ +""", +"""\ +<document source="test data"> + <paragraph> + Escape trailing low-line char in URIs: + <paragraph> + <reference name="reference_" refuri="reference_"> + reference_ + <target ids="reference" names="reference_" refuri="reference_"> + <paragraph> + <reference name="anonymous_" refuri="anonymous_"> + anonymous_ +"""], ] +totest['embedded_aliases'] = [ +["""\ +`phrase reference <alias_>`_ +""", +"""\ +<document source="test data"> + <paragraph> + <reference name="phrase reference" refname="alias"> + phrase reference + <target names="phrase\ reference" refname="alias"> +"""], +["""\ +`anonymous reference <alias_>`__ +""", +"""\ +<document source="test data"> + <paragraph> + <reference name="anonymous reference" refname="alias"> + anonymous reference +"""], +["""\ +`embedded alias on next line +<alias_>`__ +""", +"""\ +<document source="test data"> + <paragraph> + <reference name="embedded alias on next line" refname="alias"> + embedded alias on next line +"""], +["""\ +`embedded alias across lines <alias +phrase_>`__ +""", +"""\ +<document source="test data"> + <paragraph> + <reference name="embedded alias across lines" refname="alias phrase"> + embedded alias across lines +"""], +["""\ +`embedded alias with whitespace <alias +long phrase_>`__ +""", +"""\ +<document source="test data"> + <paragraph> + <reference name="embedded alias with whitespace" refname="alias long phrase"> + embedded alias with whitespace +"""], +[r""" +`embedded alias with too much whitespace < alias_ >`__ + +`embedded alias with no preceding whitespace<alias_>`__ +""", +"""\ +<document source="test data"> + <paragraph> + <reference anonymous="1" name="embedded alias with too much whitespace < alias_ >"> + embedded alias with too much whitespace < alias_ > + <paragraph> + <reference anonymous="1" name="embedded alias with no preceding whitespace<alias_>"> + embedded alias with no preceding whitespace<alias_> +"""], +] + totest['inline_targets'] = [ ["""\ _`target` Modified: trunk/docutils/test/test_transforms/test_hyperlinks.py =================================================================== --- trunk/docutils/test/test_transforms/test_hyperlinks.py 2013-02-18 20:45:21 UTC (rev 7609) +++ trunk/docutils/test/test_transforms/test_hyperlinks.py 2013-02-18 21:22:20 UTC (rev 7610) @@ -339,6 +339,42 @@ . """], ["""\ +An `embedded alias <alias_>`_. + +Another reference to the same `embedded alias`_. + +.. _alias: ham.py +""", +"""\ +<document source="test data"> + <paragraph> + An \n\ + <reference name="embedded alias" refuri="ham.py"> + embedded alias + <target names="embedded\ alias" refuri="ham.py"> + . + <paragraph> + Another reference to the same \n\ + <reference name="embedded alias" refuri="ham.py"> + embedded alias + . + <target ids="alias" names="alias" refuri="ham.py"> +"""], +["""\ +An `anonymous embedded alias <redirect_>`__. + +.. _redirect: spam.py +""", +"""\ +<document source="test data"> + <paragraph> + An \n\ + <reference name="anonymous embedded alias" refuri="spam.py"> + anonymous embedded alias + . + <target ids="redirect" names="redirect" refuri="spam.py"> +"""], +["""\ .. _target: .. [1] Footnote; target_ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gr...@us...> - 2013-02-21 20:48:12
|
Revision: 7617 http://docutils.svn.sourceforge.net/docutils/?rev=7617&view=rev Author: grubert Date: 2013-02-21 20:48:05 +0000 (Thu, 21 Feb 2013) Log Message: ----------- FIX [ docutils-Bugs-3594442 ] complex table formatting error Modified Paths: -------------- trunk/docutils/docutils/writers/latex2e/__init__.py trunk/docutils/test/functional/expected/standalone_rst_latex.tex Modified: trunk/docutils/docutils/writers/latex2e/__init__.py =================================================================== --- trunk/docutils/docutils/writers/latex2e/__init__.py 2013-02-21 20:44:25 UTC (rev 7616) +++ trunk/docutils/docutils/writers/latex2e/__init__.py 2013-02-21 20:48:05 UTC (rev 7617) @@ -1972,6 +1972,7 @@ count = node['morerows'] + 1 self.active_table.set_rowspan( self.active_table.get_entry_number()-1,count) + # TODO why does multirow end on % ? needs to be checked for below self.out.append('\\multirow{%d}{%s}{%%' % (count,self.active_table.get_column_width())) self.context.append('}') @@ -1995,9 +1996,13 @@ # header / not header if isinstance(node.parent.parent, nodes.thead): + if self.out[-1].endswith("%"): + self.out.append("\n") self.out.append('\\textbf{%') self.context.append('}') elif self.active_table.is_stub_column(): + if self.out[-1].endswith("%"): + self.out.append("\n") self.out.append('\\textbf{') self.context.append('}') else: Modified: trunk/docutils/test/functional/expected/standalone_rst_latex.tex =================================================================== --- trunk/docutils/test/functional/expected/standalone_rst_latex.tex 2013-02-21 20:44:25 UTC (rev 7616) +++ trunk/docutils/test/functional/expected/standalone_rst_latex.tex 2013-02-21 20:48:05 UTC (rev 7617) @@ -1783,7 +1783,8 @@ \setlength{\DUtablewidth}{\linewidth} \begin{longtable*}[c]{|p{0.156\DUtablewidth}|p{0.238\DUtablewidth}|} \hline -\multirow{2}{0.16\DUtablewidth}{%\textbf{% +\multirow{2}{0.16\DUtablewidth}{% +\textbf{% XXX }} & \textbf{% Variable Summary @@ -1795,7 +1796,8 @@ \hline \endfirsthead \hline -\multirow{2}{0.16\DUtablewidth}{%\textbf{% +\multirow{2}{0.16\DUtablewidth}{% +\textbf{% XXX }} & \textbf{% Variable Summary This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mi...@us...> - 2013-03-02 16:27:31
|
Revision: 7618 http://docutils.svn.sourceforge.net/docutils/?rev=7618&view=rev Author: milde Date: 2013-03-02 16:27:22 +0000 (Sat, 02 Mar 2013) Log Message: ----------- New setting `stylesheet_dirs`. Comma-separated list of directories where stylesheets are found. Used by `stylesheet_path` when expanding relative path arguments. Now, it is easy to add a custom stylesheet to Docutils default stylesheet with, e.g., --stylesheet_path="html4css1.css, mystyle.css" Changed behaviour of the default settings: if there is a file "html4css1.css" in the working directory of the process at launch, it is used instead of the one provided by Docutils in the writer source directory. Modified Paths: -------------- trunk/docutils/HISTORY.txt trunk/docutils/RELEASE-NOTES.txt trunk/docutils/docs/user/config.txt trunk/docutils/docutils/utils/__init__.py trunk/docutils/docutils/writers/html4css1/__init__.py trunk/docutils/docutils/writers/latex2e/__init__.py trunk/docutils/test/test_utils.py trunk/docutils/test/test_writers/test_html4css1_misc.py Modified: trunk/docutils/HISTORY.txt =================================================================== --- trunk/docutils/HISTORY.txt 2013-02-21 20:48:05 UTC (rev 7617) +++ trunk/docutils/HISTORY.txt 2013-03-02 16:27:22 UTC (rev 7618) @@ -36,6 +36,9 @@ * docutils/writers/html4css1/__init__.py - Fix [ 3600051 ] for tables in a list, table cells are not compacted. + - New setting `stylesheet_dirs`: Comma-separated list of directories + where stylesheets are found. Used by `stylesheet_path` when expanding + relative path arguments. * docutils/writers/latex2e/__init__.py @@ -44,6 +47,7 @@ Activate the SmartQuotes_ transform if you want this feature. - Fix literal use of babel shorthands (straight quote, tilde, ...). - Fix [ 3603246 ] Bug in option "--graphicx-option=auto". + - New setting `stylesheet_dirs`. .. _SmartQuotes: docs/user/config.html#smart-quotes Modified: trunk/docutils/RELEASE-NOTES.txt =================================================================== --- trunk/docutils/RELEASE-NOTES.txt 2013-02-21 20:48:05 UTC (rev 7617) +++ trunk/docutils/RELEASE-NOTES.txt 2013-03-02 16:27:22 UTC (rev 7618) @@ -37,8 +37,22 @@ - Drop the simple algorithm replacing straight double quotes with English typographic ones. Use the SmartQuotes transform (``--smart-quotes=True``) instead. + - New setting `stylesheet_dirs`: Comma-separated list of directories + where stylesheets are found. Used by `stylesheet_path` when expanding + relative path arguments. +* docutils/writers/html4css1/__init__.py + - New setting `stylesheet_dirs` (see above). + + Now, it is easy to add a custom stylesheet to Docutils' default + stylesheet with, e.g., ``--stylesheet_path='html4css1.css, mystyle.css'`` + + Changed behaviour of the default settings: + if there is a file ``html4css1.css`` in the working directory of the + process at launch, it is used instead of the one provided by Docutils + in the writer source directory. + Release 0.10 (2012-12-16) ========================= Modified: trunk/docutils/docs/user/config.txt =================================================================== --- trunk/docutils/docs/user/config.txt 2013-02-21 20:48:05 UTC (rev 7617) +++ trunk/docutils/docs/user/config.txt 2013-03-02 16:27:22 UTC (rev 7618) @@ -383,8 +383,8 @@ typically for variations based on country (from `ISO 3166`_ 2-letter country codes). Avoid subtags except where they add useful distinguishing information. Examples of language tags -include "fr", "en-GB", "pt_br" (the same as "pt-BR"), and -"de-1901" (German with pre-1998 spelling). +include "fr", "en-GB", "pt-br" (the same as "pt-BR"), and +"de-1901" (German with pre-1996 spelling). The language of document parts can be specified with a "language-<language tag>" `class attribute`_, e.g. @@ -823,12 +823,10 @@ Format for block quote attributions: one of "dash" (em-dash prefix), "parentheses"/"parens", or "none". Also defined for the -`LaTeX Writer`__. +`LaTeX Writer <attribution [latex2e writer]_>`__. Default: "dash". Options: ``--attribution``. -__ `attribution [latex2e writer]`_ - cloak_email_addresses ~~~~~~~~~~~~~~~~~~~~~ @@ -881,13 +879,12 @@ Embed the stylesheet in the output HTML file. The stylesheet file must specified by the stylesheet_path__ setting and must be accessible during processing. -Also defined for the `LaTeX Writer`__. +Also defined for the `LaTeX Writer <embed_stylesheet [latex2e writer]_>`__. Default: enabled. Options: ``--embed-stylesheet, --link-stylesheet``. __ `stylesheet_path [html4css1 writer]`_ -__ `embed_stylesheet [latex2e writer]`_ field_name_limit ~~~~~~~~~~~~~~~~ @@ -903,16 +900,14 @@ footnote_references ~~~~~~~~~~~~~~~~~~~ -Format for footnote references, one of "superscript" or -"brackets". Also defined for the `LaTeX Writer`__. +Format for footnote references, one of "superscript" or "brackets". +Also defined for the `LaTeX Writer <footnote_references [latex2e writer]_>`__. Overrides [#override]_ trim_footnote_reference_space_, if applicable. [#footnote_space]_ Default: "brackets". Option: ``--footnote-references``. -__ `footnote_references [latex2e writer]`_ - initial_header_level ~~~~~~~~~~~~~~~~~~~~ @@ -958,11 +953,9 @@ :HTML: Format math in standard HTML enhanced by CSS rules - Requires the ``math.css`` stylesheet (stored in the same - installation-dependent directory as the `default stylesheet`__). + Requires the ``math.css`` stylesheet (in the system + `stylesheet directory <stylesheet_dirs [html4css1 writer]_>`_ - .. __: `stylesheet_path [html4css1 writer]`_ - :MathML: Embed math content as presentational MathML_. @@ -1010,21 +1003,41 @@ ~~~~~~~~~~ A comma-separated list of CSS stylesheet URLs, used verbatim. -Also defined for the `LaTeX Writer`__. +Also defined for the `LaTeX Writer <stylesheet [latex2e writer]_>`__. Overrides also stylesheet-path__. [#override]_ Default: None. Options: ``--stylesheet``. -__ `stylesheet [latex2e writer]`_ __ `stylesheet_path [html4css1 writer]`_ +.. _stylesheet_dirs [html4css1 writer]: + +stylesheet_dirs +~~~~~~~~~~~~~~~ + +A comma-separated list of directories where stylesheets can be found. +Used by the stylesheet_path__ setting when expanding relative path arguments. + +Note: This setting defines a "search path" (similar to the PATH variable for +executables). However, the term "path" is already used in the +stylesheet_path__ setting with the meaning of a file location. + +__ +__ `stylesheet_path [html4css1 writer]`_ + +Default: the working directory of the process at launch and the directory +with default stylesheet files (writer and installation specific). +Use the ``--help`` option to get the exact value. +Option: ``--stylesheet-directories``. + .. _stylesheet_path [html4css1 writer]: stylesheet_path ~~~~~~~~~~~~~~~ -A comma-separated list of paths [#pwd]_ to CSS stylesheets. +A comma-separated list of paths to CSS stylesheets. Relative paths are +expanded if a matching file is found in the stylesheet_dirs__. If embed_stylesheet__ is False, paths are rewritten relative to the output HTML file. Also defined for the `LaTeX Writer`__. @@ -1032,26 +1045,26 @@ Pass an empty string (to either "stylesheet" or "stylesheet_path") to deactivate stylesheet inclusion. -Default: "html4css1.css" in the docutils/writers/html4css1/ -directory (installed automatically; for the exact machine-specific -path, use the ``--help`` option). Options: ``--stylesheet-path``. +Default: "html4css1.css". +Options: ``--stylesheet-path``. __ `embed_stylesheet [html4css1 writer]`_ __ `stylesheet_path [latex2e writer]`_ +__ `stylesheet_dirs [html4css1 writer]`_ .. _table_style [html4css1 writer]: table_style ~~~~~~~~~~~ -Added to standard table classes to allow styling with CSS. +Class value(s) added to tables to allow styling with CSS. The default sylesheet defines: borderless - no borders around the table. + No borders around the table. -.. TODO: booktabs - a line above and below the table and one after the head. +booktabs + Lines above and below the table and a thin line after the head. Default: "". Option: ``--table-style``. @@ -1087,7 +1100,7 @@ [pep_html writer] ------------------ +~~~~~~~~~~~~~~~~~ The PEP/HTML Writer derives from the standard HTML Writer, and shares all settings defined in the `[html4css1 writer]`_ section. The @@ -1097,38 +1110,37 @@ The PEP/HTML Writer's default for the following settings differ from those of the standard HTML Writer: -* ``stylesheet_path``: The default is - ``docutils/writers/pep_html/pep.css`` in the installation directory. - For the exact machine-specific path, use the ``--help`` option. +`stylesheet_path <stylesheet_path [html4css1 writer]_>`_: + Default: "pep.css" -* ``template``: The default is - ``docutils/writers/pep_html/template.txt`` in the installation +`template <template [html4css1 writer]_>`_: + Default: ``docutils/writers/pep_html/template.txt`` in the installation directory. For the exact machine-specific path, use the ``--help`` option. no_random -~~~~~~~~~ +""""""""" Do not use a random banner image. Mainly used to get predictable results when testing. Default: random enabled (None). Options: ``--no-random`` (hidden). pep_home -~~~~~~~~ +"""""""" Home URL prefix for PEPs. Default: current directory ("."). Options: ``--pep-home``. python_home -~~~~~~~~~~~ +""""""""""" Python's home URL. Default: parent directory (".."). Options: ``--python-home``. [s5_html writer] ----------------- +~~~~~~~~~~~~~~~~ The S5/HTML Writer derives from the standard HTML Writer, and shares all settings defined in the `[html4css1 writer]`_ section. The @@ -1138,16 +1150,17 @@ The S5/HTML Writer's default for the following settings differ from those of the standard HTML Writer: -* ``compact_lists``: The default here is to disable compact lists. +compact_lists_: + Default: disable compact lists. -* ``template``: The default is - ``docutils/writers/s5_html/template.txt`` in the installation +template_: + Default: ``docutils/writers/s5_html/template.txt`` in the installation directory. For the exact machine-specific path, use the ``--help`` option. hidden_controls -~~~~~~~~~~~~~~~ +""""""""""""""" Auto-hide the presentation controls in slideshow mode, or or keep them visible at all times. @@ -1156,7 +1169,7 @@ ``--visible-controls``. current_slide -~~~~~~~~~~~~~ +""""""""""""" Enable or disable the current slide indicator ("1/15"). @@ -1164,7 +1177,7 @@ ``--no-current-slide``. overwrite_theme_files -~~~~~~~~~~~~~~~~~~~~~ +""""""""""""""""""""" Allow or prevent the overwriting of existing theme files in the ``ui/<theme>`` directory. This has no effect if "theme_url_" is @@ -1174,7 +1187,7 @@ ``--keep-theme-files``, ``--overwrite-theme-files``. theme -~~~~~ +""""" Name of an installed S5 theme, to be copied into a ``ui/<theme>`` subdirectory, beside the destination file (output HTML). Note @@ -1185,7 +1198,7 @@ Default: "default". Option: ``--theme``. theme_url -~~~~~~~~~ +""""""""" The URL of an S5 theme directory. The destination file (output HTML) will link to this theme; nothing will be copied. Also overrides the "theme_" setting. [#override]_ @@ -1193,7 +1206,7 @@ Default: None. Option: ``--theme-url``. view_mode -~~~~~~~~~ +""""""""" The initial view mode, either "slideshow" or "outline". @@ -1348,24 +1361,48 @@ http://www.tex.ac.uk/cgi-bin/texfaq2html?label=what-TDS +.. _stylesheet_dirs [latex2e writer]: + +stylesheet_dirs +~~~~~~~~~~~~~~~ + +A comma-separated list of directories where stylesheets can be found. +Used by the stylesheet_path__ setting. + +Note: This setting defines a "search path" (similar to the PATH variable for +executables). However, the term "path" is already used in the +stylesheet_path__ setting with the meaning of a file location. + +__ +__ `stylesheet_path [latex2e writer]`_ + +Default: the working directory of the process at launch and the directory +with default stylesheet files (writer and installation specific). +Use the ``--help`` option to get the exact value. +Option: ``--stylesheet-directories``. + .. _stylesheet_path [latex2e writer]: stylesheet_path ~~~~~~~~~~~~~~~ -Similar to stylesheet__, however paths [#pwd]_ are rewritten relative to -the output file (if there is a common part in the given path and the -output file path). Also defined for the `HTML Writer`__. +A comma-separated list of style files. Relative paths are expanded if a +matching file is found in the stylesheet_dirs__. +If embed_stylesheet__ is False, paths are rewritten relative to the +output file path. Run ``latex`` from the directory containing +the output file. -Run ``latex`` from the directory containing the output file. Fails for -files in the TEXINPUTS path; use stylesheet__ in this case. +The stylesheet__ option is preferred for files in the `TeX input path`_. +Also defined for the +`HTML Writer <stylesheet_path [html4css1 writer]_>`__. + Also overrides stylesheet__. [#override]_ Default: no stylesheet (""). Option: ``--stylesheet-path``. -__ `stylesheet [latex2e writer]`_ -__ `stylesheet_path [html4css1 writer]`_ +__ `stylesheet_dirs [latex2e writer]`_ +__ `embed_stylesheet [latex2e writer]`_ __ __ `stylesheet [latex2e writer]`_ @@ -1421,13 +1458,8 @@ attribution ~~~~~~~~~~~ -Format for block quote attributions, the same as for the `HTML writer`__: -one of "dash" (em-dash prefix), "parentheses"/"parens" or "none". +See `attribution [html4css1 writer]`_. -Default: "dash". Option: ``--attribution``. - -__ `attribution [html4css1 writer]`_ - compound_enumerators ~~~~~~~~~~~~~~~~~~~~ @@ -1446,7 +1478,7 @@ Option: ``--literal-block-env``. .. [#] A literal-block element, when processed by a Docutils writer might - have it's origin in literal block following "::" or a + have it's origin in literal block following "::" or a ``.. parsed-literal::`` directive. A LaTeX verbatim environment is only usable if there is no other @@ -1461,7 +1493,7 @@ `compound_enumerators`_ are enabled. Default: disabled (None). -Options: ``--section-prefix-for-enumerators``, +Options: ``--section-prefix-for-enumerators``, ``--no-section-prefix-for-enumerators``. section_enumerator_separator @@ -1498,7 +1530,7 @@ Default: "standard". Option: ``--table-style``. [xetex writer] --------------- +~~~~~~~~~~~~~~ The xetex writer derives from the latex2e writer, and shares all settings defined in the `[latex2e writer]`_ section. The @@ -1507,44 +1539,27 @@ The following settings differ from those of the latex2e writer: -font_encoding +font_encoding_ Disabled (XeTeX uses Unicode-encoded fonts). -.. _latex_preamble [xetex writer]: +latex_preamble_ + Default: Font setup for `Linux Libertine`_,:: -latex_preamble -~~~~~~~~~~~~~~ + % Linux Libertine (free, wide coverage, not only for Linux) + \setmainfont{Linux Libertine O} + \setsansfont{Linux Biolinum O} + \setmonofont[HyphenChar=None]{DejaVu Sans Mono} -LaTeX code that will be inserted in the document preamble. - -Default: - Font setup for `Linux Libertine`_,:: - - % Linux Libertine (free, wide coverage, not only for Linux) - \setmainfont{Linux Libertine O} - \setsansfont{Linux Biolinum O} - \setmonofont[HyphenChar=None]{DejaVu Sans Mono} - The optional argument ``HyphenChar=None`` to the monospace font prevents word hyphenation in literal text. +template__ + Default: "xelatex.tex" -Option: ``--latex-preamble``. - .. _Linux Libertine: http://www.linuxlibertine.org/ +__ `template [latex2e writer]`_ -.. _template [xetex writer]: -template -~~~~~~~~ - -Path to template file. - -Default: "xelatex.tex" in the ``docutils/writers/latex2e/`` -directory (installed automatically; for the exact machine-specific -path, use the ``--help`` option). Options: ``--template``. - - [odf_odt writer] ---------------- @@ -1553,7 +1568,7 @@ stylesheet ~~~~~~~~~~ -Specify a stylesheet URL, used verbatim. +Specify a stylesheet URL, used verbatim. Default: writers/odf_odt/styles.odt in the installation directory. Modified: trunk/docutils/docutils/utils/__init__.py =================================================================== --- trunk/docutils/docutils/utils/__init__.py 2013-02-21 20:48:05 UTC (rev 7617) +++ trunk/docutils/docutils/utils/__init__.py 2013-03-02 16:27:22 UTC (rev 7618) @@ -513,9 +513,29 @@ stylesheets = settings.stylesheet_path or settings.stylesheet or [] # programmatically set default can be string or unicode: if not isinstance(stylesheets, list): - stylesheets = [cls.strip() for cls in stylesheets.split(',')] - return stylesheets + stylesheets = [path.strip() for path in stylesheets.split(',')] + # expand relative paths if found in stylesheet-dirs: + return [find_file_in_dirs(path, settings.stylesheet_dirs) + for path in stylesheets] +def find_file_in_dirs(path, dirs): + """ + Search for `path` in the list of directories `dirs`. + + Return the first expansion that matches an existing file. + """ + if os.path.isabs(path): + return path + for d in dirs: + if d == '.': + f = path + else: + d = os.path.expanduser(d) + f = os.path.join(d, path) + if os.path.exists(f): + return f + return path + def get_trim_footnote_ref_space(settings): """ Return whether or not to trim footnote space. Modified: trunk/docutils/docutils/writers/html4css1/__init__.py =================================================================== --- trunk/docutils/docutils/writers/html4css1/__init__.py 2013-02-21 20:48:05 UTC (rev 7617) +++ trunk/docutils/docutils/writers/html4css1/__init__.py 2013-03-02 16:27:22 UTC (rev 7618) @@ -34,9 +34,8 @@ from docutils import frontend, nodes, utils, writers, languages, io from docutils.utils.error_reporting import SafeString from docutils.transforms import writer_aux -from docutils.utils.math import unichar2tex, pick_math_environment +from docutils.utils.math import unichar2tex, pick_math_environment, math2html from docutils.utils.math.latex2mathml import parse_latex_math -from docutils.utils.math.math2html import math2html class Writer(writers.Writer): @@ -44,11 +43,9 @@ """Formats this writer supports.""" default_stylesheet = 'html4css1.css' + default_stylesheet_dirs = ['.', utils.relative_path( + os.path.join(os.getcwd(), 'dummy'), os.path.dirname(__file__))] - default_stylesheet_path = utils.relative_path( - os.path.join(os.getcwd(), 'dummy'), - os.path.join(os.path.dirname(__file__), default_stylesheet)) - default_template = 'template.txt' default_template_path = utils.relative_path( @@ -62,19 +59,20 @@ % default_template_path, ['--template'], {'default': default_template_path, 'metavar': '<file>'}), - ('Specify comma separated list of stylesheet URLs. ' + ('Comma separated list of stylesheet URLs. ' 'Overrides previous --stylesheet and --stylesheet-path settings.', ['--stylesheet'], - {'metavar': '<URL>', 'overrides': 'stylesheet_path', + {'metavar': '<URL[,URL,...]>', 'overrides': 'stylesheet_path', 'validator': frontend.validate_comma_separated_list}), - ('Specify comma separated list of stylesheet paths. ' - 'With --link-stylesheet, ' + ('Comma separated list of stylesheet paths. ' + 'Relative paths are expanded if a matching file is found in ' + 'the --stylesheet-dirs. With --link-stylesheet, ' 'the path is rewritten relative to the output HTML file. ' - 'Default: "%s"' % default_stylesheet_path, + 'Default: "%s"' % default_stylesheet, ['--stylesheet-path'], - {'metavar': '<file>', 'overrides': 'stylesheet', + {'metavar': '<file[,file,...]>', 'overrides': 'stylesheet', 'validator': frontend.validate_comma_separated_list, - 'default': [default_stylesheet_path]}), + 'default': [default_stylesheet]}), ('Embed the stylesheet(s) in the output HTML file. The stylesheet ' 'files must be accessible during processing. This is the default.', ['--embed-stylesheet'], @@ -84,6 +82,13 @@ 'Default: embed stylesheets.', ['--link-stylesheet'], {'dest': 'embed_stylesheet', 'action': 'store_false'}), + ('Comma-separated list of directories where stylesheets are found. ' + 'Used by --stylesheet-path when expanding relative path arguments. ' + 'Default: "%s"' % default_stylesheet_dirs, + ['--stylesheet-dirs'], + {'metavar': '<dir[,dir,...]>', + 'validator': frontend.validate_comma_separated_list, + 'default': default_stylesheet_dirs}), ('Specify the initial header level. Default is 1 for "<h1>". ' 'Does not affect document title & subtitle (see --no-doc-title).', ['--initial-header-level'], @@ -1207,7 +1212,9 @@ self.mathjax_url = self.math_output_options[0] self.math_header = self.mathjax_script % self.mathjax_url elif self.math_output == 'html': - math_code = math2html(math_code) + # TODO: fix display mode in matrices and fractions + # math2html.DocumentParameters.displaymode = (math_env != '') + math_code = math2html.math2html(math_code) elif self.math_output == 'mathml': self.doctype = self.doctype_mathml self.content_type = self.content_type_mathml Modified: trunk/docutils/docutils/writers/latex2e/__init__.py =================================================================== --- trunk/docutils/docutils/writers/latex2e/__init__.py 2013-02-21 20:48:05 UTC (rev 7617) +++ trunk/docutils/docutils/writers/latex2e/__init__.py 2013-03-02 16:27:22 UTC (rev 7618) @@ -87,13 +87,15 @@ '".sty" or omitted and with \\input else. ' ' Overrides previous --stylesheet and --stylesheet-path settings.', ['--stylesheet'], - {'default': '', 'metavar': '<file>', + {'default': '', 'metavar': '<file[,file,...]>', 'overrides': 'stylesheet_path', 'validator': frontend.validate_comma_separated_list}), - ('Like --stylesheet, but the path is rewritten ' - 'relative to the output file. ', + ('Comma separated list of LaTeX packages/stylesheets. ' + 'Relative paths are expanded if a matching file is found in ' + 'the --stylesheet-dirs. With --link-stylesheet, ' + 'the path is rewritten relative to the output *.tex file. ', ['--stylesheet-path'], - {'metavar': '<file>', 'overrides': 'stylesheet', + {'metavar': '<file[,file,...]>', 'overrides': 'stylesheet', 'validator': frontend.validate_comma_separated_list}), ('Link to the stylesheet(s) in the output file. (default)', ['--link-stylesheet'], @@ -103,6 +105,13 @@ ['--embed-stylesheet'], {'default': 0, 'action': 'store_true', 'validator': frontend.validate_boolean}), + ('Comma-separated list of directories where stylesheets are found. ' + 'Used by --stylesheet-path when expanding relative path arguments. ' + 'Default: "."', + ['--stylesheet-dirs'], + {'metavar': '<dir[,dir,...]>', + 'validator': frontend.validate_comma_separated_list, + 'default': ['.']}), ('Customization by LaTeX code in the preamble. ' 'Default: select PDF standard fonts (Times, Helvetica, Courier).', ['--latex-preamble'], Modified: trunk/docutils/test/test_utils.py =================================================================== --- trunk/docutils/test/test_utils.py 2013-02-21 20:48:05 UTC (rev 7617) +++ trunk/docutils/test/test_utils.py 2013-03-02 16:27:22 UTC (rev 7618) @@ -287,6 +287,19 @@ target = os.path.join(u'eggs', u'fileB') self.assertEqual(utils.relative_path(None, target), u'eggs/fileB') + def test_find_file_in_dirs(self): + # Search for file `path` in the sequence of directories `dirs`. + # Return the first expansion that matches an existing file. + dirs = ('nonex', '.', '..') + self.assertEqual(utils.find_file_in_dirs('HISTORY.txt', dirs), + '../HISTORY.txt') + # Return `path` if the file exists in the cwd or if there is no match + self.assertEqual(utils.find_file_in_dirs('alltests.py', dirs), + 'alltests.py') + self.assertEqual(utils.find_file_in_dirs('gibts/nicht.txt', dirs), + 'gibts/nicht.txt') + + if __name__ == '__main__': unittest.main() Modified: trunk/docutils/test/test_writers/test_html4css1_misc.py =================================================================== --- trunk/docutils/test/test_writers/test_html4css1_misc.py 2013-02-21 20:48:05 UTC (rev 7617) +++ trunk/docutils/test/test_writers/test_html4css1_misc.py 2013-03-02 16:27:22 UTC (rev 7618) @@ -30,12 +30,62 @@ # xmlcharrefreplace handler is used. self.assertIn(b('EUR = €'), result) +class SettingsTestCase(DocutilsTestSupport.StandardTestCase): + data = 'test' + + def test_default_stylesheet(self): + # default style sheet, embedded + mysettings = {'_disable_config': True,} + styles = core.publish_parts(self.data, writer_name='html4css1', + settings_overrides=mysettings)['stylesheet'] + self.assertIn('Default cascading style sheet ' + 'for the HTML output of Docutils.', styles) + + def test_default_stylesheet_linked(self): + # default style sheet, linked + mysettings = {'_disable_config': True, + 'embed_stylesheet': False} + styles = core.publish_parts(self.data, writer_name='html4css1', + settings_overrides=mysettings)['stylesheet'] + self.assertIn('docutils/writers/html4css1/html4css1.css', styles) + + def test_math_stylesheet_linked(self): + # default + math style sheet, linked + mysettings = {'_disable_config': True, + 'embed_stylesheet': False, + 'stylesheet_path': 'html4css1.css, math.css'} + styles = core.publish_parts(self.data, writer_name='html4css1', + settings_overrides=mysettings)['stylesheet'] + self.assertIn('docutils/writers/html4css1/html4css1.css', styles) + self.assertIn('docutils/writers/html4css1/math.css', styles) + + def test_custom_stylesheet_linked(self): + # default + custom style sheet, linked + mysettings = {'_disable_config': True, + 'embed_stylesheet': False, + 'stylesheet_path': 'html4css1.css, ' + 'data/ham.css'} + styles = core.publish_parts(self.data, writer_name='html4css1', + settings_overrides=mysettings)['stylesheet'] + self.assertIn('docutils/writers/html4css1/html4css1.css', styles) + self.assertIn('href="data/ham.css"', styles) + + def test_custom_stylesheet_dir(self): + mysettings = {'_disable_config': True, + 'embed_stylesheet': False, + 'stylesheet_dirs': ('../docutils/writers/html4css1/', + 'data'), + 'stylesheet_path': 'html4css1.css, ham.css'} + styles = core.publish_parts(self.data, writer_name='html4css1', + settings_overrides=mysettings)['stylesheet'] + self.assertIn('docutils/writers/html4css1/html4css1.css', styles) + self.assertIn('href="data/ham.css"', styles) + class MathTestCase(DocutilsTestSupport.StandardTestCase): - + """Attention: This class tests the current implementation of maths support which is open to change in future Docutils releases. """ - settings_overrides={'_disable_config': True,} mathjax_script = '<script type="text/javascript" src="%s">' default_mathjax_url = ('http://cdn.mathjax.org/mathjax/latest/MathJax.js' '?config=TeX-AMS-MML_HTMLorMML') @@ -45,40 +95,40 @@ def test_math_output_default(self): # Currently MathJax with default URL. Likely to change to HTML! - mysettings = self.settings_overrides + mysettings = {'_disable_config': True,} head = core.publish_parts(self.data, writer_name='html4css1', settings_overrides=mysettings)['head'] self.assertIn(self.mathjax_script % self.default_mathjax_url, head) - + def test_math_output_mathjax(self): # Explicitly specifying math_output=MathJax, case insensitively # use default MathJax URL - mysettings = self.settings_overrides.copy() - mysettings.update({'math_output': 'MathJax'}) + mysettings = {'_disable_config': True, + 'math_output': 'MathJax'} head = core.publish_parts(self.data, writer_name='html4css1', settings_overrides=mysettings)['head'] self.assertIn(self.mathjax_script % self.default_mathjax_url, head) def test_math_output_mathjax_custom(self): # Customizing MathJax URL - mysettings = self.settings_overrides.copy() - mysettings.update({'math_output': - 'mathjax %s' % self.custom_mathjax_url}) + mysettings = {'_disable_config': True, + 'math_output': + 'mathjax %s' % self.custom_mathjax_url} head = core.publish_parts(self.data, writer_name='html4css1', settings_overrides=mysettings)['head'] self.assertIn(self.mathjax_script % self.custom_mathjax_url, head) - + def test_math_output_html(self): # There should be no MathJax script when math_output is not MathJax - mysettings = self.settings_overrides.copy() - mysettings.update({'math_output': 'HTML'}) + mysettings = {'_disable_config': True, + 'math_output': 'HTML'} head = core.publish_parts(self.data, writer_name='html4css1', settings_overrides=mysettings)['head'] self.assertNotIn('MathJax.js', head) - + def test_math_output_mathjax_no_math(self): - mysettings = self.settings_overrides.copy() - mysettings.update({'math_output': 'MathJax'}) + mysettings = {'_disable_config': True, + 'math_output': 'MathJax'} # There should be no math script when text does not contain math head = core.publish_parts('No math.', writer_name='html4css1')['head'] self.assertNotIn('MathJax', head) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mi...@us...> - 2013-03-02 16:36:30
|
Revision: 7619 http://docutils.svn.sourceforge.net/docutils/?rev=7619&view=rev Author: milde Date: 2013-03-02 16:36:20 +0000 (Sat, 02 Mar 2013) Log Message: ----------- Small fixes to math-output=HTML. Modified Paths: -------------- trunk/docutils/docutils/utils/math/math2html.py trunk/docutils/docutils/writers/html4css1/math.css trunk/docutils/test/functional/expected/math_output_html.html trunk/docutils/test/functional/input/data/math.css Modified: trunk/docutils/docutils/utils/math/math2html.py =================================================================== --- trunk/docutils/docutils/utils/math/math2html.py 2013-03-02 16:27:22 UTC (rev 7618) +++ trunk/docutils/docutils/utils/math/math2html.py 2013-03-02 16:36:20 UTC (rev 7619) @@ -25,14 +25,6 @@ import sys -if sys.version_info < (2,4): - def reversed(sequence): - i = len(sequence) - while i > 0: - i = i - 1 - yield sequence[i] - - class Trace(object): "A tracing class" @@ -638,6 +630,9 @@ u'\\int':u'∫', u'\\intop':u'∫', u'\\lim':u'lim', u'\\prod':u'∏', u'\\smallint':u'∫', u'\\sum':u'∑', } + # TODO: setting for simple enlarged vs. piecewise symbols + for key in (u'\\int', u'\\intop', u'\\prod', u'\\sum'): + limitcommands[key] = '<span class="symbol">%s</span>' % limitcommands[key] misccommands = { u'\\limits':u'LimitPreviousCommand', u'\\newcommand':u'MacroDefinition', Modified: trunk/docutils/docutils/writers/html4css1/math.css =================================================================== --- trunk/docutils/docutils/writers/html4css1/math.css 2013-03-02 16:27:22 UTC (rev 7618) +++ trunk/docutils/docutils/writers/html4css1/math.css 2013-03-02 16:36:20 UTC (rev 7619) @@ -21,7 +21,7 @@ /* Formulas */ .formula { text-align: center; - font-family: "DejaVu Serif", serif; + font-family: "Droid Serif", "DejaVu Serif", "STIX", serif; margin: 1.2em 0; } span.formula { @@ -113,9 +113,11 @@ vertical-align: middle; } span.symbol { + line-height: 125%; font-size: 125%; } span.bigsymbol { + line-height: 150%; font-size: 150%; } span.largesymbol { @@ -139,10 +141,10 @@ } .limit { display: table-row; - line-height: 95%; + line-height: 99%; } sup.limit, sub.limit { - line-height: 150%; + line-height: 100%; } span.symbolover { display: inline-block; Modified: trunk/docutils/test/functional/expected/math_output_html.html =================================================================== --- trunk/docutils/test/functional/expected/math_output_html.html 2013-03-02 16:27:22 UTC (rev 7618) +++ trunk/docutils/test/functional/expected/math_output_html.html 2013-03-02 16:36:20 UTC (rev 7619) @@ -62,10 +62,10 @@ <p>More than one display math block can be put in one math directive. For example, the following sum and integral with limits:</p> <div class="formula"> -<span class="limits"><span class="limit">∫</span></span><span class="scripts"><sup class="script">1</sup><sub class="script">0</sub></span><i>x</i><sup><i>n</i></sup><i>dx</i> = <span class="fraction"><span class="ignored">(</span><span class="numerator">1</span><span class="ignored">)/(</span><span class="denominator"><i>n</i> + 1</span><span class="ignored">)</span></span> +<span class="limits"><sup class="limit">1</sup><span class="limit"><span class="symbol">∫</span></span><sub class="limit">0</sub></span><i>x</i><sup><i>n</i></sup><i>dx</i> = <span class="fraction"><span class="ignored">(</span><span class="numerator">1</span><span class="ignored">)/(</span><span class="denominator"><i>n</i> + 1</span><span class="ignored">)</span></span> </div> <div class="formula"> -<span class="limits"><span class="limit">∑</span></span><span class="scripts"><sup class="script"><i>m</i></sup><sub class="script"><i>n</i> = 1</sub></span><i>n</i> = <span class="fraction"><span class="ignored">(</span><span class="numerator"><i>m</i>(<i>m</i> + 1)</span><span class="ignored">)/(</span><span class="denominator">2</span><span class="ignored">)</span></span> +<span class="limits"><sup class="limit"><i>m</i></sup><span class="limit"><span class="symbol">∑</span></span><sub class="limit"><i>n</i> = 1</sub></span><i>n</i> = <span class="fraction"><span class="ignored">(</span><span class="numerator"><i>m</i>(<i>m</i> + 1)</span><span class="ignored">)/(</span><span class="denominator">2</span><span class="ignored">)</span></span> </div> <p>LaTeX-supported Unicode math symbols can be used in math roles and directives:</p> @@ -121,7 +121,7 @@ \widehat{xxx} --> <p>Modulation Transfer Function:</p> <div class="formula"> -<span class="text">MTF</span> = <span class="array"><span class="arrayrow"><span class="bracket align-left">|</span></span><span class="arrayrow"><span class="bracket align-left">|</span></span></span><span class="fraction"><span class="ignored">(</span><span class="numerator">ℱ{<i>s</i>(<i>x</i>)}</span><span class="ignored">)/(</span><span class="denominator">ℱ{<i>s</i>(<i>x</i>)}|<sub><i>ω</i><sub><i>x</i></sub> = 0</sub></span><span class="ignored">)</span></span><span class="array"><span class="arrayrow"><span class="bracket align-right">|</span></span><span class="arrayrow"><span class="bracket align-right">|</span></span></span> = <span class="mathrm"> abs</span><span class="array"><span class="arrayrow"><span class="bracket align-left">⎛</span></span><span class="arrayrow"><span class="bracket align-left">⎝</span></span></span><span class="fraction"><span class="ignored">(</span><span class="numerator"><span class="limits"><span class="limit">∫</span></span><span class="scripts"><sup class="script">∞</sup><sub class="script"> − ∞</sub></span><i>s</i>(<i>x</i>)<span class="mathrm">e</span><sup><span class="mathrm">i</span><i>ω</i><sub><i>x</i></sub><i>x</i></sup><span class="mathrm">d</span><i>x</i></span><span class="ignored">)/(</span><span class="denominator"><span class="limits"><span class="limit">∫</span></span><span class="scripts"><sup class="script">∞</sup><sub class="script"> − ∞</sub></span><i>s</i>(<i>x</i>)<span class="mathrm">d</span><i>x</i></span><span class="ignored">)</span></span><span class="array"><span class="arrayrow"><span class="bracket align-right">⎞</span></span><span class="arrayrow"><span class="bracket align-right">⎠</span></span></span>. +<span class="text">MTF</span> = <span class="array"><span class="arrayrow"><span class="bracket align-left">|</span></span><span class="arrayrow"><span class="bracket align-left">|</span></span></span><span class="fraction"><span class="ignored">(</span><span class="numerator">ℱ{<i>s</i>(<i>x</i>)}</span><span class="ignored">)/(</span><span class="denominator">ℱ{<i>s</i>(<i>x</i>)}|<sub><i>ω</i><sub><i>x</i></sub> = 0</sub></span><span class="ignored">)</span></span><span class="array"><span class="arrayrow"><span class="bracket align-right">|</span></span><span class="arrayrow"><span class="bracket align-right">|</span></span></span> = <span class="mathrm"> abs</span><span class="array"><span class="arrayrow"><span class="bracket align-left">⎛</span></span><span class="arrayrow"><span class="bracket align-left">⎝</span></span></span><span class="fraction"><span class="ignored">(</span><span class="numerator"><span class="limits"><span class="limit"><span class="symbol">∫</span></span></span><span class="scripts"><sup class="script">∞</sup><sub class="script"> − ∞</sub></span><i>s</i>(<i>x</i>)<span class="mathrm">e</span><sup><span class="mathrm">i</span><i>ω</i><sub><i>x</i></sub><i>x</i></sup><span class="mathrm">d</span><i>x</i></span><span class="ignored">)/(</span><span class="denominator"><span class="limits"><span class="limit"><span class="symbol">∫</span></span></span><span class="scripts"><sup class="script">∞</sup><sub class="script"> − ∞</sub></span><i>s</i>(<i>x</i>)<span class="mathrm">d</span><i>x</i></span><span class="ignored">)</span></span><span class="array"><span class="arrayrow"><span class="bracket align-right">⎞</span></span><span class="arrayrow"><span class="bracket align-right">⎠</span></span></span>. </div> <p>Math split over two lines: If a double backslash is detected outside a <tt class="docutils literal"><span class="pre">\begin{...}</span> <span class="pre">\end{...}</span></tt> pair, the math code is wrapped in an <a class="reference external" href="ftp://ftp.ams.org/ams/doc/amsmath/short-math-guide.pdf">AMSmath</a> @@ -150,7 +150,7 @@ </span> <span class="arraycell align-l"> - = <span class="limits"><span class="limit">∫</span></span><i>s</i><sub><span class="mathrm">in</span></sub>(<i>x</i>’)<i>s</i><sub><i>δ</i></sub>(<i>x</i> − <i>x</i>’)<span class="mathrm">d</span><i>x</i>’ + = <span class="limits"><span class="limit"><span class="symbol">∫</span></span></span><i>s</i><sub><span class="mathrm">in</span></sub>(<i>x</i>’)<i>s</i><sub><i>δ</i></sub>(<i>x</i> − <i>x</i>’)<span class="mathrm">d</span><i>x</i>’ </span> </span> Modified: trunk/docutils/test/functional/input/data/math.css =================================================================== --- trunk/docutils/test/functional/input/data/math.css 2013-03-02 16:27:22 UTC (rev 7618) +++ trunk/docutils/test/functional/input/data/math.css 2013-03-02 16:36:20 UTC (rev 7619) @@ -21,7 +21,7 @@ /* Formulas */ .formula { text-align: center; - font-family: "DejaVu Serif", serif; + font-family: "Droid Serif", "DejaVu Serif", "STIX", serif; margin: 1.2em 0; } span.formula { @@ -113,9 +113,11 @@ vertical-align: middle; } span.symbol { + line-height: 125%; font-size: 125%; } span.bigsymbol { + line-height: 150%; font-size: 150%; } span.largesymbol { @@ -139,10 +141,10 @@ } .limit { display: table-row; - line-height: 95%; + line-height: 99%; } sup.limit, sub.limit { - line-height: 150%; + line-height: 100%; } span.symbolover { display: inline-block; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mi...@us...> - 2013-03-04 13:20:56
|
Revision: 7621 http://docutils.svn.sourceforge.net/docutils/?rev=7621&view=rev Author: milde Date: 2013-03-04 13:20:49 +0000 (Mon, 04 Mar 2013) Log Message: ----------- Fix [ 3606028 ] ``assert`` is skipped with ``python -O``. Also, raise ValueError with list of valid units if length_or_percentage_or_unitless() fails. Modified Paths: -------------- trunk/docutils/HISTORY.txt trunk/docutils/docutils/parsers/rst/directives/__init__.py trunk/docutils/test/test_parsers/test_rst/test_directives/test_images.py Modified: trunk/docutils/HISTORY.txt =================================================================== --- trunk/docutils/HISTORY.txt 2013-03-04 10:07:58 UTC (rev 7620) +++ trunk/docutils/HISTORY.txt 2013-03-04 13:20:49 UTC (rev 7621) @@ -25,6 +25,10 @@ - Fix [ 3601607 ] node.__repr__() must return `str` instance. +* docutils/parsers/rst/directives/__init__.py + + - Fix [ 3606028 ] ``assert`` is skipped with ``python -O``. + * docutils/parsers/rst/directives/images.py - Apply [ 3599485 ] node source/line information for sphinx translation. Modified: trunk/docutils/docutils/parsers/rst/directives/__init__.py =================================================================== --- trunk/docutils/docutils/parsers/rst/directives/__init__.py 2013-03-04 10:07:58 UTC (rev 7620) +++ trunk/docutils/docutils/parsers/rst/directives/__init__.py 2013-03-04 13:20:49 UTC (rev 7621) @@ -232,9 +232,8 @@ """ match = re.match(r'^([0-9.]+) *(%s)$' % '|'.join(units), argument) try: - assert match is not None float(match.group(1)) - except (AssertionError, ValueError): + except (AttributeError, ValueError): raise ValueError( 'not a positive measure of one of the following units:\n%s' % ' '.join(['"%s"' % i for i in units])) @@ -262,7 +261,11 @@ try: return get_measure(argument, length_units + ['%']) except ValueError: - return get_measure(argument, ['']) + default + try: + return get_measure(argument, ['']) + default + except ValueError: + # raise ValueError with list of valid units: + return get_measure(argument, length_units + ['%']) def class_option(argument): """ Modified: trunk/docutils/test/test_parsers/test_rst/test_directives/test_images.py =================================================================== --- trunk/docutils/test/test_parsers/test_rst/test_directives/test_images.py 2013-03-04 10:07:58 UTC (rev 7620) +++ trunk/docutils/test/test_parsers/test_rst/test_directives/test_images.py 2013-03-04 13:20:49 UTC (rev 7621) @@ -164,6 +164,22 @@ """], ["""\ .. image:: picture.png + :width: 20mc +""", +"""\ +<document source="test data"> + <system_message level="3" line="1" source="test data" type="ERROR"> + <paragraph> + Error in "image" directive: + invalid option value: (option: "width"; value: \'20mc\') + not a positive measure of one of the following units: + "em" "ex" "px" "in" "cm" "mm" "pt" "pc" "%". + <literal_block xml:space="preserve"> + .. image:: picture.png + :width: 20mc +"""], +["""\ +.. image:: picture.png :height: 100 :width: 200 :scale: 50 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mi...@us...> - 2013-03-04 21:17:18
|
Revision: 7623 http://docutils.svn.sourceforge.net/docutils/?rev=7623&view=rev Author: milde Date: 2013-03-04 21:17:09 +0000 (Mon, 04 Mar 2013) Log Message: ----------- New default for `math-output` setting: "HTML math.css". Modified Paths: -------------- trunk/docutils/HISTORY.txt trunk/docutils/RELEASE-NOTES.txt trunk/docutils/docs/user/config.txt trunk/docutils/docutils/writers/html4css1/__init__.py trunk/docutils/test/functional/expected/standalone_rst_html4css1.html trunk/docutils/test/functional/tests/standalone_rst_html4css1.py trunk/docutils/test/test_writers/test_html4css1_misc.py Modified: trunk/docutils/HISTORY.txt =================================================================== --- trunk/docutils/HISTORY.txt 2013-03-04 21:14:50 UTC (rev 7622) +++ trunk/docutils/HISTORY.txt 2013-03-04 21:17:09 UTC (rev 7623) @@ -43,7 +43,10 @@ - New setting `stylesheet_dirs`: Comma-separated list of directories where stylesheets are found. Used by `stylesheet_path` when expanding relative path arguments. + - New default for math-output_: ``HTML math.css``. +.. _math-output: docs/user/config.html#math-output + * docutils/writers/latex2e/__init__.py - Drop the simple algorithm replacing straight double quotes with Modified: trunk/docutils/RELEASE-NOTES.txt =================================================================== --- trunk/docutils/RELEASE-NOTES.txt 2013-03-04 21:14:50 UTC (rev 7622) +++ trunk/docutils/RELEASE-NOTES.txt 2013-03-04 21:17:09 UTC (rev 7623) @@ -43,23 +43,27 @@ * docutils/writers/html4css1/__init__.py - New setting `stylesheet_dirs` (see above). - + Now, it is easy to add a custom stylesheet to Docutils' default stylesheet with, e.g., ``--stylesheet_path='html4css1.css, mystyle.css'`` - - Changed behaviour of the default settings: + + Changed behaviour of the default settings: if there is a file ``html4css1.css`` in the working directory of the process at launch, it is used instead of the one provided by Docutils in the writer source directory. + - New default for `math-output` setting: "HTML math.css". + Secure and self-contained alternative to the old default + ("MathJax" requiring JavaScript from the MathJax server network). + Release 0.10 (2012-12-16) ========================= -.. Note:: +.. Note:: Docutils 0.9.x is the last version supporting Python 2.3. - + Docutils 0.10 is compatible with Python versions from 2.4 to 3.2 (cf. `Python 3 compatibility`_). @@ -70,7 +74,7 @@ - ``docutils/math``, ``docutils/error_reporting.py``, and ``docutils/urischemes.py`` moved to the utils package. Code importing these modules needs to adapt, e.g.:: - + try: import docutils.math as math except ImportError: @@ -80,7 +84,7 @@ * docutils/io.py - - FileInput/FileOutput: no system-exit on IOError. + - FileInput/FileOutput: no system-exit on IOError. The `handle_io_errors` option is ignored. .. _Python 3 compatibility: README.html#python-3-compatibility Modified: trunk/docutils/docs/user/config.txt =================================================================== --- trunk/docutils/docs/user/config.txt 2013-03-04 21:14:50 UTC (rev 7622) +++ trunk/docutils/docs/user/config.txt 2013-03-04 21:17:09 UTC (rev 7623) @@ -922,6 +922,16 @@ The format of mathematical content (`math directive`_ and role) in the output document. Supported values are (case insensitive): +:HTML: + Format math in standard HTML enhanced by CSS rules. + Requires the ``math.css`` stylesheet (in the system + `stylesheet directory <stylesheet_dirs [html4css1 writer]_>`_ + + A `stylesheet_path <stylesheet_path [html4css1 writer]_>`_ + can be appended after whitespace, the specified + stylesheet(s) will only be referenced or embedded, if required + (i.e. if there is mathematical content in the document). + :MathJax: Format math for display with MathJax_, a JavaScript-based math rendering engine that uses HTML/CSS, JavaScript, and unicode @@ -950,12 +960,6 @@ __ http://www.mathjax.org/resources/faqs/#problem-https -:HTML: - Format math in standard HTML enhanced by CSS rules - - Requires the ``math.css`` stylesheet (in the system - `stylesheet directory <stylesheet_dirs [html4css1 writer]_>`_ - :MathML: Embed math content as presentational MathML_. @@ -978,7 +982,7 @@ The failsave fallback. -Default: MathJax. Option: ``--math-output``. +Default: "HTML math.css". Option: ``--math-output``. New in Docutils 0.8. @@ -1390,7 +1394,7 @@ matching file is found in the stylesheet_dirs__. If embed_stylesheet__ is False, paths are rewritten relative to the output file path. Run ``latex`` from the directory containing -the output file. +the output file. The stylesheet__ option is preferred for files in the `TeX input path`_. Modified: trunk/docutils/docutils/writers/html4css1/__init__.py =================================================================== --- trunk/docutils/docutils/writers/html4css1/__init__.py 2013-03-04 21:14:50 UTC (rev 7622) +++ trunk/docutils/docutils/writers/html4css1/__init__.py 2013-03-04 21:17:09 UTC (rev 7623) @@ -140,9 +140,9 @@ ['--table-style'], {'default': ''}), ('Math output format, one of "MathML", "HTML", "MathJax" ' - 'or "LaTeX". Default: "MathJax"', + 'or "LaTeX". Default: "HTML math.css"', ['--math-output'], - {'default': 'MathJax'}), + {'default': 'HTML math.css'}), ('Omit the XML declaration. Use with caution.', ['--no-xml-declaration'], {'dest': 'xml_declaration', 'default': 1, 'action': 'store_false', @@ -328,7 +328,7 @@ self.in_document_title = 0 # len(self.body) or 0 self.in_mailto = False self.author_in_authors = False - self.math_header = '' + self.math_header = [] def astext(self): return ''.join(self.head_prefix + self.head @@ -773,7 +773,10 @@ self.meta.insert(0, self.content_type % self.settings.output_encoding) self.head.insert(0, self.content_type % self.settings.output_encoding) if self.math_header: - self.head.append(self.math_header) + if self.math_output == 'mathjax': + self.head.extend(self.math_header) + else: + self.stylesheet.extend(self.math_header) # skip content-type meta tag with interpolated charset value: self.html_head.extend(self.head[1:]) self.body_prefix.append(self.starttag(node, 'div', CLASS='document')) @@ -1207,13 +1210,17 @@ # settings and conversion if self.math_output in ('latex', 'mathjax'): math_code = self.encode(math_code) - if self.math_output == 'mathjax': + if self.math_output == 'mathjax' and not self.math_header: if self.math_output_options: self.mathjax_url = self.math_output_options[0] - self.math_header = self.mathjax_script % self.mathjax_url + self.math_header = [self.mathjax_script % self.mathjax_url] elif self.math_output == 'html': + if self.math_output_options and not self.math_header: + self.math_header = [self.stylesheet_call( + utils.find_file_in_dirs(s, self.settings.stylesheet_dirs)) + for s in self.math_output_options[0].split(',')] # TODO: fix display mode in matrices and fractions - # math2html.DocumentParameters.displaymode = (math_env != '') + math2html.DocumentParameters.displaymode = (math_env != '') math_code = math2html.math2html(math_code) elif self.math_output == 'mathml': self.doctype = self.doctype_mathml Modified: trunk/docutils/test/functional/expected/standalone_rst_html4css1.html =================================================================== --- trunk/docutils/test/functional/expected/standalone_rst_html4css1.html 2013-03-04 21:14:50 UTC (rev 7622) +++ trunk/docutils/test/functional/expected/standalone_rst_html4css1.html 2013-03-04 21:17:09 UTC (rev 7623) @@ -12,8 +12,8 @@ <meta name="copyright" content="This document has been placed in the public domain. You may do with it as you wish. You may copy, modify, redistribute, reattribute, sell, buy, rent, lease, destroy, or improve it, quote it at length, excerpt, incorporate, collate, fold, staple, or mutilate it, or do anything else to it that your or anyone else's heart desires." /> <meta content="reStructuredText, test, parser" name="keywords" /> <meta content="A test document, containing at least one example of each reStructuredText construct." lang="en" name="description" /> -<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> <link rel="stylesheet" href="../input/data/html4css1.css" type="text/css" /> +<link rel="stylesheet" href="../input/data/math.css" type="text/css" /> </head> <body> <div class="header"> @@ -862,7 +862,7 @@ or as base for special code roles, e.g. the LaTeX code in the next paragraph.</p> <p>Docutils uses LaTeX syntax for math directives and roles: -<code class="tex">\alpha = f(x)</code> prints <span class="math">\(\alpha = f(x)\)</span> +<code class="tex">\alpha = f(x)</code> prints <span class="formula"><i>α</i> = <i>f</i>(<i>x</i>)</span> .</p> <p>The <tt class="docutils literal">:code:</tt> option of the <cite>include</cite> directive sets the included content as a code block, here the rst file <tt class="docutils literal">header_footer.txt</tt> with line numbers:</p> Modified: trunk/docutils/test/functional/tests/standalone_rst_html4css1.py =================================================================== --- trunk/docutils/test/functional/tests/standalone_rst_html4css1.py 2013-03-04 21:14:50 UTC (rev 7622) +++ trunk/docutils/test/functional/tests/standalone_rst_html4css1.py 2013-03-04 21:17:09 UTC (rev 7623) @@ -8,7 +8,6 @@ writer_name = "html4css1" # Settings: -# local copy of default stylesheet: +# local copy of stylesheets: # (Test runs in ``docutils/test/``, we need relative path from there.) -settings_overrides['stylesheet_path'] = ( - 'functional/input/data/html4css1.css') +settings_overrides['stylesheet_dirs'] = ('.', 'functional/input/data') Modified: trunk/docutils/test/test_writers/test_html4css1_misc.py =================================================================== --- trunk/docutils/test/test_writers/test_html4css1_misc.py 2013-03-04 21:14:50 UTC (rev 7622) +++ trunk/docutils/test/test_writers/test_html4css1_misc.py 2013-03-04 21:17:09 UTC (rev 7623) @@ -94,11 +94,11 @@ data = ':math:`42`' def test_math_output_default(self): - # Currently MathJax with default URL. Likely to change to HTML! + # HTML with math.css stylesheet (since 0.11) mysettings = {'_disable_config': True,} - head = core.publish_parts(self.data, writer_name='html4css1', - settings_overrides=mysettings)['head'] - self.assertIn(self.mathjax_script % self.default_mathjax_url, head) + styles = core.publish_parts(self.data, writer_name='html4css1', + settings_overrides=mysettings)['stylesheet'] + self.assertIn('convert LaTeX equations to HTML output.', styles) def test_math_output_mathjax(self): # Explicitly specifying math_output=MathJax, case insensitively @@ -119,13 +119,26 @@ self.assertIn(self.mathjax_script % self.custom_mathjax_url, head) def test_math_output_html(self): - # There should be no MathJax script when math_output is not MathJax mysettings = {'_disable_config': True, 'math_output': 'HTML'} head = core.publish_parts(self.data, writer_name='html4css1', settings_overrides=mysettings)['head'] + # There should be no MathJax script when math_output is not MathJax self.assertNotIn('MathJax.js', head) + def test_math_output_html_stylesheet(self): + mysettings = {'_disable_config': True, + 'math_output': 'HTML math.css,custom/style.css', + 'stylesheet_dirs': ('.', 'functional/input/data'), + 'embed_stylesheet': False} + styles = core.publish_parts(self.data, writer_name='html4css1', + settings_overrides=mysettings)['stylesheet'] + self.assertEqual(u"""\ +<link rel="stylesheet" href="functional/input/data/html4css1.css" type="text/css" /> +<link rel="stylesheet" href="functional/input/data/math.css" type="text/css" /> +<link rel="stylesheet" href="custom/style.css" type="text/css" /> +""", styles) + def test_math_output_mathjax_no_math(self): mysettings = {'_disable_config': True, 'math_output': 'MathJax'} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mi...@us...> - 2013-03-07 14:10:35
|
Revision: 7624 http://docutils.svn.sourceforge.net/docutils/?rev=7624&view=rev Author: milde Date: 2013-03-07 14:10:26 +0000 (Thu, 07 Mar 2013) Log Message: ----------- Fix [ 3607029 ] traceback with embedded alias pointing to missing target. Modified Paths: -------------- trunk/docutils/HISTORY.txt trunk/docutils/docutils/transforms/references.py trunk/docutils/test/test_transforms/test_hyperlinks.py Modified: trunk/docutils/HISTORY.txt =================================================================== --- trunk/docutils/HISTORY.txt 2013-03-04 21:17:09 UTC (rev 7623) +++ trunk/docutils/HISTORY.txt 2013-03-07 14:10:26 UTC (rev 7624) @@ -33,6 +33,10 @@ - Apply [ 3599485 ] node source/line information for sphinx translation. +* docutils/transforms/references.py + + - Fix [ 3607029 ] traceback with embedded alias pointing to missing target. + * docutils/utils/__init__.py - Fix [ 3596884 ] exception importing ``docutils.io``. Modified: trunk/docutils/docutils/transforms/references.py =================================================================== --- trunk/docutils/docutils/transforms/references.py 2013-03-04 21:17:09 UTC (rev 7623) +++ trunk/docutils/docutils/transforms/references.py 2013-03-07 14:10:26 UTC (rev 7624) @@ -275,7 +275,8 @@ reflist.extend(self.document.refnames.get(name, [])) for id in target['ids']: reflist.extend(self.document.refids.get(id, [])) - naming += '(id="%s")' % target['ids'][0] + if target['ids']: + naming += '(id="%s")' % target['ids'][0] msg = self.document.reporter.error( 'Indirect hyperlink target %s refers to target "%s", %s.' % (naming, target['refname'], explanation), base_node=target) @@ -391,15 +392,16 @@ <target id="id1" name="direct internal"> """ for name in target['names']: - refid = self.document.nameids[name] + refid = self.document.nameids.get(name) reflist = self.document.refnames.get(name, []) if reflist: target.note_referenced_by(name=name) for ref in reflist: if ref.resolved: continue - del ref['refname'] - ref['refid'] = refid + if refid: + del ref['refname'] + ref['refid'] = refid ref.resolved = 1 Modified: trunk/docutils/test/test_transforms/test_hyperlinks.py =================================================================== --- trunk/docutils/test/test_transforms/test_hyperlinks.py 2013-03-04 21:17:09 UTC (rev 7623) +++ trunk/docutils/test/test_transforms/test_hyperlinks.py 2013-03-07 14:10:26 UTC (rev 7624) @@ -374,7 +374,29 @@ . <target ids="redirect" names="redirect" refuri="spam.py"> """], +# TODO: suppress the INFO message? ["""\ +An `embedded alias <alias_>`_ with unknown reference. +""", +"""\ +<document source="test data"> + <paragraph> + An \n\ + <problematic ids="id3" refid="id2"> + `embedded alias <alias_>`_ + <target names="embedded\ alias" refname="alias"> + with unknown reference. + <system_message ids="id1" level="3" line="1" source="test data" type="ERROR"> + <paragraph> + Indirect hyperlink target "embedded alias" refers to target "alias", which does not exist. + <system_message backrefs="id3" ids="id2" level="3" line="1" source="test data" type="ERROR"> + <paragraph> + Unknown target name: "alias". + <system_message level="1" line="1" source="test data" type="INFO"> + <paragraph> + Hyperlink target "embedded alias" is not referenced.\ +"""], +["""\ .. _target: .. [1] Footnote; target_ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gr...@us...> - 2013-03-08 09:03:25
|
Revision: 7626 http://docutils.svn.sourceforge.net/docutils/?rev=7626&view=rev Author: grubert Date: 2013-03-08 09:03:16 +0000 (Fri, 08 Mar 2013) Log Message: ----------- Fix [3607063] handle lines starting with a period. Modified Paths: -------------- trunk/docutils/HISTORY.txt trunk/docutils/docutils/writers/manpage.py trunk/docutils/test/functional/expected/standalone_rst_manpage.man trunk/docutils/test/test_writers/test_manpage.py Modified: trunk/docutils/HISTORY.txt =================================================================== --- trunk/docutils/HISTORY.txt 2013-03-08 08:37:32 UTC (rev 7625) +++ trunk/docutils/HISTORY.txt 2013-03-08 09:03:16 UTC (rev 7626) @@ -64,6 +64,7 @@ * docutils/writers/manpage.py + - Fix [3607063] handle lines starting with a period. - Fix option separating comma was bold (thanks to Bill Morris). Release 0.10 (2012-12-16) Modified: trunk/docutils/docutils/writers/manpage.py =================================================================== --- trunk/docutils/docutils/writers/manpage.py 2013-03-08 08:37:32 UTC (rev 7625) +++ trunk/docutils/docutils/writers/manpage.py 2013-03-08 09:03:16 UTC (rev 7626) @@ -289,10 +289,10 @@ text = text.replace(in_char, out_markup) # unicode text = self.deunicode(text) + # prevent interpretation of "." at line start + if text[0] == '.': + text = '\\&' + text if self._in_literal: - # prevent interpretation of "." at line start - if text[0] == '.': - text = '\\&' + text text = text.replace('\n.', '\n\\&.') self.body.append(text) Modified: trunk/docutils/test/functional/expected/standalone_rst_manpage.man =================================================================== --- trunk/docutils/test/functional/expected/standalone_rst_manpage.man 2013-03-08 08:37:32 UTC (rev 7625) +++ trunk/docutils/test/functional/expected/standalone_rst_manpage.man 2013-03-08 09:03:16 UTC (rev 7626) @@ -93,7 +93,7 @@ .IP 3. 3 number lists .IP 4. 3 -math: The LaTeX source is shown, e.g. \fBn! + \esin(x_n^2)\fP. +math: The LaTeX source is shown, e.g. \fBn! + \esin(x_n^2)\fP\&. .UNINDENT .sp Discussion is still open. Modified: trunk/docutils/test/test_writers/test_manpage.py =================================================================== --- trunk/docutils/test/test_writers/test_manpage.py 2013-03-08 08:37:32 UTC (rev 7625) +++ trunk/docutils/test/test_writers/test_manpage.py 2013-03-08 09:03:16 UTC (rev 7626) @@ -138,6 +138,7 @@ something important +. period at line start. """, r""".\" Man page generated from reStructuredText. . @@ -194,6 +195,8 @@ something important .UNINDENT .UNINDENT +.sp +\&. period at line start. .SH AUTHOR so...@so... @@ -292,7 +295,7 @@ .UNINDENT .INDENT 0.0 .TP -.B . +.B \&. bla bla bla .UNINDENT .INDENT 0.0 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mi...@us...> - 2013-03-11 21:01:10
|
Revision: 7629 http://docutils.svn.sourceforge.net/docutils/?rev=7629&view=rev Author: milde Date: 2013-03-11 21:01:03 +0000 (Mon, 11 Mar 2013) Log Message: ----------- Treat embedded standalone hyperlinks as URI, even if ending in underscore. Modified Paths: -------------- trunk/docutils/docs/ref/rst/restructuredtext.txt trunk/docutils/docutils/parsers/rst/states.py trunk/docutils/test/test_transforms/test_hyperlinks.py Modified: trunk/docutils/docs/ref/rst/restructuredtext.txt =================================================================== --- trunk/docutils/docs/ref/rst/restructuredtext.txt 2013-03-09 10:19:35 UTC (rev 7628) +++ trunk/docutils/docs/ref/rst/restructuredtext.txt 2013-03-11 21:01:03 UTC (rev 7629) @@ -2656,8 +2656,9 @@ Embedded URIs and Aliases ````````````````````````` -A hyperlink reference may directly embed a target URI or a hyperlink -reference within angle brackets ("<...>") as follows:: +A hyperlink reference may directly embed a target URI or (since +Docutils 0.11) a hyperlink reference within angle brackets ("<...>") +as follows:: See the `Python home page <http://www.python.org>`_ for info. @@ -2692,20 +2693,26 @@ __ http://www.rfc-editor.org/rfc/rfc2396.txt __ http://www.rfc-editor.org/rfc/rfc2732.txt -If a target URI happens to end with an underscore, this needs to be -backslash-escaped to avoid being parsed as hyperlink reference. For -example :: +`Standalone hyperlinks`_ are treated as URIs, even if they end with an +underscore like in the example of a Python function documentation:: + `__init__ <http:example.py.html#__init__>`__ + +If a target URI that is not recognized as `standalone hyperlink`_ happens +to end with an underscore, this needs to be backslash-escaped to avoid +being parsed as hyperlink reference. For example :: + Use the `source <parrots.txt\_>`__. creates an anonymous reference to the file ``parrots.txt_``. If the reference text happens to end with angle-bracketed text that is -*not* a URI or hyperlink reference, the open-angle-bracket needs to be -backslash-escaped. For example, here is a reference to a title -describing a tag:: +*not* a URI or hyperlink reference, at least one angle-bracket needs to +be backslash-escaped or an escaped space should follow. For example, here +are three references to titles describing a tag:: - See `HTML Element: \<a>`_ below. + See `HTML Element: \<a>`_, `HTML Element: <b\> `_, and + `HTML Element: <c>\ `_. The reference text may also be omitted, in which case the URI will be duplicated for use as the reference text. This is useful for relative @@ -2820,6 +2827,7 @@ addition to being replaced, the replacement text or element will refer to the "substitution and hyperlink reference" target. +.. _standalone hyperlink: Standalone Hyperlinks --------------------- Modified: trunk/docutils/docutils/parsers/rst/states.py =================================================================== --- trunk/docutils/docutils/parsers/rst/states.py 2013-03-09 10:19:35 UTC (rev 7628) +++ trunk/docutils/docutils/parsers/rst/states.py 2013-03-11 21:01:03 UTC (rev 7629) @@ -792,7 +792,8 @@ if match: # embedded <URI> or <alias_> text = unescape(escaped[:match.start(0)]) aliastext = unescape(match.group(2), restore_backslashes=True) - if aliastext.endswith('_') and not aliastext.endswith(r'\_'): + if aliastext.endswith('_') and not (aliastext.endswith(r'\_') + or self.patterns.uri.match(aliastext)): aliastype = 'name' alias = normalize_name(aliastext[:-1]) target = nodes.target(match.group(1), refname=alias) Modified: trunk/docutils/test/test_transforms/test_hyperlinks.py =================================================================== --- trunk/docutils/test/test_transforms/test_hyperlinks.py 2013-03-09 10:19:35 UTC (rev 7628) +++ trunk/docutils/test/test_transforms/test_hyperlinks.py 2013-03-11 21:01:03 UTC (rev 7629) @@ -374,7 +374,6 @@ . <target ids="redirect" names="redirect" refuri="spam.py"> """], -# TODO: suppress the INFO message? ["""\ An `embedded alias <alias_>`_ with unknown reference. """, @@ -397,6 +396,46 @@ Hyperlink target "embedded alias" is not referenced.\ """], ["""\ +An embedded URI with trailing underline: +`__init__ <http:example.py.html#__init__>`__. +""", +"""\ +<document source="test data"> + <paragraph> + An embedded URI with trailing underline: + <reference name="__init__" refuri="http:example.py.html#__init__"> + __init__ + . +"""], +["""\ +Hyperlinks with angle-bracketed text need escaping. + +See `Element \<a>`_, `Element <b\>`_, and `Element <c>\ `_. + +.. _`Element <a>`: +.. _`Element <b>`: +.. _`Element <c>`: elements.txt +""", +"""\ +<document source="test data"> + <paragraph> + Hyperlinks with angle-bracketed text need escaping. + <paragraph> + See \n\ + <reference name="Element <a>" refuri="elements.txt"> + Element <a> + , \n\ + <reference name="Element <b>" refuri="elements.txt"> + Element <b> + , and \n\ + <reference name="Element <c>" refuri="elements.txt"> + Element <c> + . + <target refid="element-a"> + <target refid="element-b"> + <target ids="element-c element-b element-a" names="element\ <c> element\ <b> element\ <a>" refuri="elements.txt"> +"""], +["""\ .. _target: .. [1] Footnote; target_ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mi...@us...> - 2013-03-15 22:27:08
|
Revision: 7630 http://sourceforge.net/p/docutils/code/7630 Author: milde Date: 2013-03-15 22:27:04 +0000 (Fri, 15 Mar 2013) Log Message: ----------- Bugfix: do not make "stylesheet-path"s absolute. The --stylesheet-path arguments are searched in the --stylesheet-dirs, therefore must not be made absolute before. Thanks to Martin Gignac for tracking down the bug. Modified Paths: -------------- trunk/docutils/docutils/writers/html4css1/__init__.py trunk/docutils/docutils/writers/latex2e/__init__.py trunk/docutils/docutils/writers/pep_html/__init__.py trunk/docutils/test/test_settings.py trunk/docutils/test/test_writers/test_html4css1_misc.py Modified: trunk/docutils/docutils/writers/html4css1/__init__.py =================================================================== --- trunk/docutils/docutils/writers/html4css1/__init__.py 2013-03-11 21:01:03 UTC (rev 7629) +++ trunk/docutils/docutils/writers/html4css1/__init__.py 2013-03-15 22:27:04 UTC (rev 7630) @@ -154,8 +154,6 @@ settings_defaults = {'output_encoding_error_handler': 'xmlcharrefreplace'} - relative_path_settings = ('stylesheet_path',) - config_section = 'html4css1 writer' config_section_dependencies = ('writers',) Modified: trunk/docutils/docutils/writers/latex2e/__init__.py =================================================================== --- trunk/docutils/docutils/writers/latex2e/__init__.py 2013-03-11 21:01:03 UTC (rev 7629) +++ trunk/docutils/docutils/writers/latex2e/__init__.py 2013-03-15 22:27:04 UTC (rev 7630) @@ -217,8 +217,6 @@ settings_defaults = {'sectnum_depth': 0 # updated by SectNum transform } - relative_path_settings = ('stylesheet_path',) - config_section = 'latex2e writer' config_section_dependencies = ('writers',) Modified: trunk/docutils/docutils/writers/pep_html/__init__.py =================================================================== --- trunk/docutils/docutils/writers/pep_html/__init__.py 2013-03-11 21:01:03 UTC (rev 7629) +++ trunk/docutils/docutils/writers/pep_html/__init__.py 2013-03-15 22:27:04 UTC (rev 7630) @@ -52,8 +52,7 @@ settings_default_overrides = {'stylesheet_path': default_stylesheet_path, 'template': default_template_path,} - relative_path_settings = (html4css1.Writer.relative_path_settings - + ('template',)) + relative_path_settings = ('template',) config_section = 'pep_html writer' config_section_dependencies = ('writers', 'html4css1 writer') Modified: trunk/docutils/test/test_settings.py =================================================================== --- trunk/docutils/test/test_settings.py 2013-03-11 21:01:03 UTC (rev 7629) +++ trunk/docutils/test/test_settings.py 2013-03-15 22:27:04 UTC (rev 7630) @@ -44,7 +44,7 @@ u'python_home': u'http://www.python.org', u'source_link': True, 'stylesheet': None, - u'stylesheet_path': [fixpath(u'data/stylesheets/pep.css')], + u'stylesheet_path': [u'stylesheets/pep.css'], 'template': fixpath(u'data/pep-html-template')}, 'one': {u'datestamp': u'%Y-%m-%d %H:%M UTC', u'generator': True, @@ -54,7 +54,7 @@ 'record_dependencies': utils.DependencyList(), u'source_link': True, 'stylesheet': None, - u'stylesheet_path': [fixpath(u'data/stylesheets/pep.css')], + u'stylesheet_path': [u'stylesheets/pep.css'], u'tab_width': 8, u'template': fixpath(u'data/pep-html-template'), u'trim_footnote_reference_space': True, @@ -63,7 +63,7 @@ u'generator': False, 'record_dependencies': utils.DependencyList(), u'stylesheet': None, - u'stylesheet_path': [fixpath(u'data/test.css')], + u'stylesheet_path': [u'test.css'], 'trim_footnote_reference_space': None}, 'list': {u'expose_internals': [u'a', u'b', u'c', u'd', u'e'], u'strip_classes': [u'spam', u'pan', u'fun', u'parrot'], Modified: trunk/docutils/test/test_writers/test_html4css1_misc.py =================================================================== --- trunk/docutils/test/test_writers/test_html4css1_misc.py 2013-03-11 21:01:03 UTC (rev 7629) +++ trunk/docutils/test/test_writers/test_html4css1_misc.py 2013-03-15 22:27:04 UTC (rev 7630) @@ -81,6 +81,16 @@ self.assertIn('docutils/writers/html4css1/html4css1.css', styles) self.assertIn('href="data/ham.css"', styles) + def test_custom_stylesheet_dir_embedded(self): + mysettings = {'_disable_config': True, + 'embed_stylesheet': True, + 'stylesheet_dirs': ('../docutils/writers/html4css1/', + 'data'), + 'stylesheet_path': 'ham.css'} + styles = core.publish_parts(self.data, writer_name='html4css1', + settings_overrides=mysettings)['stylesheet'] + self.assertIn('dl.docutils dd {\n margin-bottom: 0.5em }', styles) + class MathTestCase(DocutilsTestSupport.StandardTestCase): """Attention: This class tests the current implementation of maths support This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mi...@us...> - 2013-03-22 13:25:49
|
Revision: 7638 http://sourceforge.net/p/docutils/code/7638 Author: milde Date: 2013-03-22 13:25:46 +0000 (Fri, 22 Mar 2013) Log Message: ----------- Fix [ 157 ] Line block parsing does not like system message. Modified Paths: -------------- trunk/docutils/HISTORY.txt trunk/docutils/docutils/parsers/rst/states.py trunk/docutils/test/test_parsers/test_rst/test_line_blocks.py Modified: trunk/docutils/HISTORY.txt =================================================================== --- trunk/docutils/HISTORY.txt 2013-03-22 08:53:56 UTC (rev 7637) +++ trunk/docutils/HISTORY.txt 2013-03-22 13:25:46 UTC (rev 7638) @@ -33,6 +33,10 @@ - Apply [ 3599485 ] node source/line information for sphinx translation. +* docutils/parsers/rst/states.py + + - Fix [ 157 ] Line block parsing doesn't like system message. + * docutils/transforms/references.py - Fix [ 3607029 ] traceback with embedded alias pointing to missing target. Modified: trunk/docutils/docutils/parsers/rst/states.py =================================================================== --- trunk/docutils/docutils/parsers/rst/states.py 2013-03-22 08:53:56 UTC (rev 7637) +++ trunk/docutils/docutils/parsers/rst/states.py 2013-03-22 13:25:46 UTC (rev 7638) @@ -1594,7 +1594,7 @@ def nest_line_block_lines(self, block): for index in range(1, len(block)): - if block[index].indent is None: + if getattr(block[index], 'indent', None) is None: block[index].indent = block[index - 1].indent self.nest_line_block_segment(block) Modified: trunk/docutils/test/test_parsers/test_rst/test_line_blocks.py =================================================================== --- trunk/docutils/test/test_parsers/test_rst/test_line_blocks.py 2013-03-22 08:53:56 UTC (rev 7637) +++ trunk/docutils/test/test_parsers/test_rst/test_line_blocks.py 2013-03-22 13:25:46 UTC (rev 7638) @@ -300,6 +300,29 @@ <line> * is not recognized. """], +["""\ +System messages can appear in place of lines: + +| `uff <test1>`_ +| `uff <test2>`_ +""", +"""\ +<document source="test data"> + <paragraph> + System messages can appear in place of lines: + <line_block> + <line> + <reference name="uff" refuri="test1"> + uff + <target dupnames="uff" ids="uff" refuri="test1"> + <system_message backrefs="id1" level="2" line="3" source="test data" type="WARNING"> + <paragraph> + Duplicate explicit target name: "uff". + <line> + <reference name="uff" refuri="test2"> + uff + <target dupnames="uff" ids="id1" refuri="test2"> +"""], ] This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mi...@us...> - 2013-03-25 20:57:54
|
Revision: 7640 http://sourceforge.net/p/docutils/code/7640 Author: milde Date: 2013-03-25 20:57:52 +0000 (Mon, 25 Mar 2013) Log Message: ----------- Always import our local copy of roman.py (report Larry Hastings). Modified Paths: -------------- trunk/docutils/HISTORY.txt trunk/docutils/docutils/parsers/rst/states.py Modified: trunk/docutils/HISTORY.txt =================================================================== --- trunk/docutils/HISTORY.txt 2013-03-23 14:20:49 UTC (rev 7639) +++ trunk/docutils/HISTORY.txt 2013-03-25 20:57:52 UTC (rev 7640) @@ -36,6 +36,7 @@ * docutils/parsers/rst/states.py - Fix [ 157 ] Line block parsing doesn't like system message. + - Always import our local copy of roman.py (report Larry Hastings). * docutils/transforms/references.py Modified: trunk/docutils/docutils/parsers/rst/states.py =================================================================== --- trunk/docutils/docutils/parsers/rst/states.py 2013-03-23 14:20:49 UTC (rev 7639) +++ trunk/docutils/docutils/parsers/rst/states.py 2013-03-25 20:57:52 UTC (rev 7640) @@ -105,10 +105,6 @@ import sys import re -try: - import roman -except ImportError: - import docutils.utils.roman as roman from types import FunctionType, MethodType from docutils import nodes, statemachine, utils @@ -120,7 +116,7 @@ from docutils.parsers.rst import directives, languages, tableparser, roles from docutils.parsers.rst.languages import en as _fallback_language_module from docutils.utils import escape2null, unescape, column_width -from docutils.utils import punctuation_chars, urischemes +from docutils.utils import punctuation_chars, roman, urischemes class MarkupError(DataError): pass class UnknownInterpretedRoleError(DataError): pass This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mi...@us...> - 2013-04-17 14:17:39
|
Revision: 7646 http://sourceforge.net/p/docutils/code/7646 Author: milde Date: 2013-04-17 14:17:37 +0000 (Wed, 17 Apr 2013) Log Message: ----------- Fix [ 228 ] search docutils components first locally then globally. Modified Paths: -------------- trunk/docutils/HISTORY.txt trunk/docutils/docutils/parsers/__init__.py Modified: trunk/docutils/HISTORY.txt =================================================================== --- trunk/docutils/HISTORY.txt 2013-04-08 17:35:15 UTC (rev 7645) +++ trunk/docutils/HISTORY.txt 2013-04-17 14:17:37 UTC (rev 7646) @@ -25,6 +25,11 @@ - Fix [ 3601607 ] node.__repr__() must return `str` instance. +* docutils/parsers/rst/__init__.py + + - Fix [ 228 ] search docutils components (reader, writer, parser) + first locally then globally. + * docutils/parsers/rst/directives/__init__.py - Fix [ 3606028 ] ``assert`` is skipped with ``python -O``. Modified: trunk/docutils/docutils/parsers/__init__.py =================================================================== --- trunk/docutils/docutils/parsers/__init__.py 2013-04-08 17:35:15 UTC (rev 7645) +++ trunk/docutils/docutils/parsers/__init__.py 2013-04-17 14:17:37 UTC (rev 7646) @@ -47,7 +47,7 @@ if parser_name in _parser_aliases: parser_name = _parser_aliases[parser_name] try: + module = __import__(parser_name, globals(), locals(), level=1) + except ImportError: module = __import__(parser_name, globals(), locals(), level=0) - except ImportError: - module = __import__(parser_name, globals(), locals(), level=1) return module.Parser This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mi...@us...> - 2013-04-18 07:36:28
|
Revision: 7648 http://sourceforge.net/p/docutils/code/7648 Author: milde Date: 2013-04-18 07:36:22 +0000 (Thu, 18 Apr 2013) Log Message: ----------- Fix [ 228 ], part II. Try local import of docutils components (reader, writer, parser, language module) before global search. Modified Paths: -------------- trunk/docutils/HISTORY.txt trunk/docutils/docutils/languages/__init__.py trunk/docutils/docutils/parsers/rst/languages/__init__.py trunk/docutils/docutils/readers/__init__.py trunk/docutils/docutils/writers/__init__.py Modified: trunk/docutils/HISTORY.txt =================================================================== --- trunk/docutils/HISTORY.txt 2013-04-18 06:42:45 UTC (rev 7647) +++ trunk/docutils/HISTORY.txt 2013-04-18 07:36:22 UTC (rev 7648) @@ -20,16 +20,13 @@ - Apply [ 2714873 ] Fix for the overwritting of document attributes. - Support embedded aliases within hyperlink references. + - Fix [ 228 ] try local import of docutils components (reader, writer, parser, + language module) before global search. * docutils/nodes.py - Fix [ 3601607 ] node.__repr__() must return `str` instance. -* docutils/parsers/rst/__init__.py - - - Fix [ 228 ] search docutils components (reader, writer, parser) - first locally then globally. - * docutils/parsers/rst/directives/__init__.py - Fix [ 3606028 ] ``assert`` is skipped with ``python -O``. Modified: trunk/docutils/docutils/languages/__init__.py =================================================================== --- trunk/docutils/docutils/languages/__init__.py 2013-04-18 06:42:45 UTC (rev 7647) +++ trunk/docutils/docutils/languages/__init__.py 2013-04-18 07:36:22 UTC (rev 7648) @@ -31,10 +31,10 @@ if tag in _languages: return _languages[tag] try: - module = __import__(tag, globals(), locals(), level=0) + module = __import__(tag, globals(), locals(), level=1) except ImportError: try: - module = __import__(tag, globals(), locals(), level=1) + module = __import__(tag, globals(), locals(), level=0) except ImportError: continue _languages[tag] = module Modified: trunk/docutils/docutils/parsers/rst/languages/__init__.py =================================================================== --- trunk/docutils/docutils/parsers/rst/languages/__init__.py 2013-04-18 06:42:45 UTC (rev 7647) +++ trunk/docutils/docutils/parsers/rst/languages/__init__.py 2013-04-18 07:36:22 UTC (rev 7648) @@ -26,10 +26,10 @@ if tag in _languages: return _languages[tag] try: - module = __import__(tag, globals(), locals(), level=0) + module = __import__(tag, globals(), locals(), level=1) except ImportError: try: - module = __import__(tag, globals(), locals(), level=1) + module = __import__(tag, globals(), locals(), level=0) except ImportError: continue _languages[tag] = module Modified: trunk/docutils/docutils/readers/__init__.py =================================================================== --- trunk/docutils/docutils/readers/__init__.py 2013-04-18 06:42:45 UTC (rev 7647) +++ trunk/docutils/docutils/readers/__init__.py 2013-04-18 07:36:22 UTC (rev 7648) @@ -107,7 +107,7 @@ if reader_name in _reader_aliases: reader_name = _reader_aliases[reader_name] try: + module = __import__(reader_name, globals(), locals(), level=1) + except ImportError: module = __import__(reader_name, globals(), locals(), level=0) - except ImportError: - module = __import__(reader_name, globals(), locals(), level=1) return module.Reader Modified: trunk/docutils/docutils/writers/__init__.py =================================================================== --- trunk/docutils/docutils/writers/__init__.py 2013-04-18 06:42:45 UTC (rev 7647) +++ trunk/docutils/docutils/writers/__init__.py 2013-04-18 07:36:22 UTC (rev 7648) @@ -134,7 +134,7 @@ if writer_name in _writer_aliases: writer_name = _writer_aliases[writer_name] try: + module = __import__(writer_name, globals(), locals(), level=1) + except ImportError: module = __import__(writer_name, globals(), locals(), level=0) - except ImportError: - module = __import__(writer_name, globals(), locals(), level=1) return module.Writer This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mi...@us...> - 2013-05-06 11:26:03
|
Revision: 7658 http://sourceforge.net/p/docutils/code/7658 Author: milde Date: 2013-05-06 11:26:00 +0000 (Mon, 06 May 2013) Log Message: ----------- Writer comment with (currently ignored) figure alignment to the LaTeX source. Modified Paths: -------------- trunk/docutils/docutils/writers/latex2e/__init__.py trunk/docutils/test/functional/expected/standalone_rst_latex.tex trunk/docutils/test/functional/expected/standalone_rst_xetex.tex Modified: trunk/docutils/docutils/writers/latex2e/__init__.py =================================================================== --- trunk/docutils/docutils/writers/latex2e/__init__.py 2013-05-06 06:38:08 UTC (rev 7657) +++ trunk/docutils/docutils/writers/latex2e/__init__.py 2013-05-06 11:26:00 UTC (rev 7658) @@ -1528,7 +1528,7 @@ ## return head + '\n' + body def is_inline(self, node): - """Check whether a node represents an inline element""" + """Check whether a node represents an inline or block-level element""" return isinstance(node.parent, nodes.TextElement) def append_hypertargets(self, node): @@ -1656,7 +1656,7 @@ self.out.append('}') def visit_caption(self, node): - self.out.append( '\\caption{' ) + self.out.append('\n\\caption{') def depart_caption(self, node): self.out.append('}\n') @@ -2131,21 +2131,18 @@ def visit_figure(self, node): self.requirements['float_settings'] = PreambleCmds.float_settings - # ! the 'align' attribute should set "outer alignment" ! - # For "inner alignment" use LaTeX default alignment (similar to HTML) - ## if ('align' not in node.attributes or - ## node.attributes['align'] == 'center'): - ## align = '\n\\centering' - ## align_end = '' - ## else: - ## # TODO non vertical space for other alignments. - ## align = '\\begin{flush%s}' % node.attributes['align'] - ## align_end = '\\end{flush%s}' % node.attributes['align'] - ## self.out.append( '\\begin{figure}%s\n' % align ) - ## self.context.append( '%s\\end{figure}\n' % align_end ) - self.out.append('\\begin{figure}') + # The 'align' attribute sets the "outer alignment", + # for "inner alignment" use LaTeX default alignment (similar to HTML) + alignment = node.attributes.get('align', 'center') + if alignment != 'center': + # The LaTeX "figure" environment always uses the full textwidth, + # so "outer alignment" is ignored. Just write a comment. + # TODO: use the wrapfigure environment? + self.out.append('\\begin{figure} %% align = "%s"\n' % alignment) + else: + self.out.append('\\begin{figure}\n') if node.get('ids'): - self.out += ['\n'] + self.ids_to_labels(node) + self.out += self.ids_to_labels(node) + ['\n'] def depart_figure(self, node): self.out.append('\\end{figure}\n') @@ -2299,7 +2296,6 @@ pre = [] post = [] include_graphics_options = [] - display_style = ('block-', 'inline-')[self.is_inline(node)] align_codes = { # inline images: by default latex aligns the bottom. 'bottom': ('', ''), @@ -2310,6 +2306,7 @@ 'left': (r'\noindent{', r'\hfill}'), 'right': (r'\noindent{\hfill', '}'),} if 'align' in attrs: + # TODO: warn or ignore non-applicable alignment settings? try: align_code = align_codes[attrs['align']] pre.append(align_code[0]) @@ -2325,7 +2322,8 @@ if 'width' in attrs: include_graphics_options.append('width=%s' % self.to_latex_length(attrs['width'])) - if not self.is_inline(node): + if not (self.is_inline(node) or + isinstance(node.parent, nodes.figure)): pre.append('\n') post.append('\n') pre.reverse() Modified: trunk/docutils/test/functional/expected/standalone_rst_latex.tex =================================================================== --- trunk/docutils/test/functional/expected/standalone_rst_latex.tex 2013-05-06 06:38:08 UTC (rev 7657) +++ trunk/docutils/test/functional/expected/standalone_rst_latex.tex 2013-05-06 11:26:00 UTC (rev 7658) @@ -970,7 +970,7 @@ \end{figure} A left-aligned figure: -\begin{figure} +\begin{figure} % align = "left" \noindent\makebox[\textwidth][c]{\includegraphics[width=40px]{../../../docs/user/rst/images/biohazard.png}} \caption{This is the caption.} \begin{DUlegend} @@ -1002,7 +1002,7 @@ rendering software used. A right-aligned figure: -\begin{figure} +\begin{figure} % align = "right" \noindent\makebox[\textwidth][c]{\includegraphics[width=40px]{../../../docs/user/rst/images/biohazard.png}} \caption{This is the caption.} \begin{DUlegend} Modified: trunk/docutils/test/functional/expected/standalone_rst_xetex.tex =================================================================== --- trunk/docutils/test/functional/expected/standalone_rst_xetex.tex 2013-05-06 06:38:08 UTC (rev 7657) +++ trunk/docutils/test/functional/expected/standalone_rst_xetex.tex 2013-05-06 11:26:00 UTC (rev 7658) @@ -969,7 +969,7 @@ \end{figure} A left-aligned figure: -\begin{figure} +\begin{figure} % align = "left" \noindent\makebox[\textwidth][c]{\includegraphics[width=40\pdfpxdimen]{../../../docs/user/rst/images/biohazard.png}} \caption{This is the caption.} \begin{DUlegend} @@ -1001,7 +1001,7 @@ rendering software used. A right-aligned figure: -\begin{figure} +\begin{figure} % align = "right" \noindent\makebox[\textwidth][c]{\includegraphics[width=40\pdfpxdimen]{../../../docs/user/rst/images/biohazard.png}} \caption{This is the caption.} \begin{DUlegend} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mi...@us...> - 2013-05-07 10:53:02
|
Revision: 7661 http://sourceforge.net/p/docutils/code/7661 Author: milde Date: 2013-05-07 10:52:59 +0000 (Tue, 07 May 2013) Log Message: ----------- Avoid repeated class declarations in html4css1 writer Modified version of patch [ 104 ]. HtmlTranslator.starttag() no longer adds class arguments to the node. Modified Paths: -------------- trunk/docutils/HISTORY.txt trunk/docutils/docutils/writers/html4css1/__init__.py Modified: trunk/docutils/HISTORY.txt =================================================================== --- trunk/docutils/HISTORY.txt 2013-05-07 09:01:00 UTC (rev 7660) +++ trunk/docutils/HISTORY.txt 2013-05-07 10:52:59 UTC (rev 7661) @@ -55,6 +55,8 @@ where stylesheets are found. Used by `stylesheet_path` when expanding relative path arguments. - New default for math-output_: ``HTML math.css``. + - Avoid repeated class declarations in html4css1 writer + (modified version of patch [ 104 ]). .. _math-output: docs/user/config.html#math-output Modified: trunk/docutils/docutils/writers/html4css1/__init__.py =================================================================== --- trunk/docutils/docutils/writers/html4css1/__init__.py 2013-05-07 09:01:00 UTC (rev 7660) +++ trunk/docutils/docutils/writers/html4css1/__init__.py 2013-05-07 10:52:59 UTC (rev 7661) @@ -402,19 +402,19 @@ ids = [] for (name, value) in attributes.items(): atts[name.lower()] = value - classes = node.get('classes', []) - if 'class' in atts: - classes.append(atts.pop('class')) - # move language specification to 'lang' attribute - languages = [cls for cls in classes - if cls.startswith('language-')] + classes = [] + languages = [] + # unify class arguments and move language specification + for cls in node.get('classes', []) + atts.pop('class', '').split() : + if cls.startswith('language-'): + languages.append(cls[9:]) + elif cls.strip() and cls not in classes: + classes.append(cls) if languages: # attribute name is 'lang' in XHTML 1.0 but 'xml:lang' in 1.1 - atts[self.lang_attribute] = languages[0][9:] - classes.pop(classes.index(languages[0])) - classes = ' '.join(classes).strip() + atts[self.lang_attribute] = languages[0] if classes: - atts['class'] = classes + atts['class'] = ' '.join(classes) assert 'id' not in atts ids.extend(node.get('ids', [])) if 'ids' in atts: @@ -906,7 +906,8 @@ and len(node.astext()) > self.settings.field_name_limit): atts['colspan'] = 2 self.context.append('</tr>\n' - + self.starttag(node.parent, 'tr', '') + + self.starttag(node.parent, 'tr', '', + CLASS='field') + '<td> </td>') else: self.context.append('') This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mi...@us...> - 2013-05-16 20:38:46
|
Revision: 7662 http://sourceforge.net/p/docutils/code/7662 Author: milde Date: 2013-05-16 20:38:43 +0000 (Thu, 16 May 2013) Log Message: ----------- Fix [ 210 ] Python 3.3 checks CVS syntax only if "strict" is True. Modified Paths: -------------- trunk/docutils/HISTORY.txt trunk/docutils/docutils/parsers/rst/directives/tables.py trunk/docutils/test/test_parsers/test_rst/test_directives/test_tables.py Modified: trunk/docutils/HISTORY.txt =================================================================== --- trunk/docutils/HISTORY.txt 2013-05-07 10:52:59 UTC (rev 7661) +++ trunk/docutils/HISTORY.txt 2013-05-16 20:38:43 UTC (rev 7662) @@ -35,6 +35,10 @@ - Apply [ 3599485 ] node source/line information for sphinx translation. +* docutils/parsers/rst/directives/tables.py + + - Fix [ 210 ] Python 3.3 checks CVS syntax only if "strict" is True. + * docutils/parsers/rst/states.py - Fix [ 157 ] Line block parsing doesn't like system message. Modified: trunk/docutils/docutils/parsers/rst/directives/tables.py =================================================================== --- trunk/docutils/docutils/parsers/rst/directives/tables.py 2013-05-07 10:52:59 UTC (rev 7661) +++ trunk/docutils/docutils/parsers/rst/directives/tables.py 2013-05-16 20:38:43 UTC (rev 7662) @@ -164,6 +164,7 @@ quotechar = '"' doublequote = True skipinitialspace = True + strict = True lineterminator = '\n' quoting = csv.QUOTE_MINIMAL @@ -189,6 +190,7 @@ escapechar = '\\' doublequote = False skipinitialspace = True + strict = True lineterminator = '\n' quoting = csv.QUOTE_MINIMAL Modified: trunk/docutils/test/test_parsers/test_rst/test_directives/test_tables.py =================================================================== --- trunk/docutils/test/test_parsers/test_rst/test_directives/test_tables.py 2013-05-07 10:52:59 UTC (rev 7661) +++ trunk/docutils/test/test_parsers/test_rst/test_directives/test_tables.py 2013-05-16 20:38:43 UTC (rev 7662) @@ -10,7 +10,7 @@ from __init__ import DocutilsTestSupport -import os +import os, sys import csv from docutils.parsers.rst.directives import tables @@ -32,6 +32,10 @@ else: unichr_exception_string = str(unichr_exception) +csv_eod_error_str = "unexpected end of data" +if sys.version_info < (3,3): + csv_eod_error_str = "newline inside string" + def null_bytes(): import csv csv_data = open(utf_16_csv, 'rb').read() @@ -760,12 +764,12 @@ <system_message level="3" line="1" source="test data" type="ERROR"> <paragraph> Error with CSV data in "csv-table" directive: - newline inside string + %s <literal_block xml:space="preserve"> .. csv-table:: bad CSV data \n\ "bad", \"csv, data -"""], +""" % csv_eod_error_str], ["""\ .. csv-table:: bad CSV header data :header: "bad", \"csv, data @@ -777,13 +781,13 @@ <system_message level="3" line="1" source="test data" type="ERROR"> <paragraph> Error with CSV data in "csv-table" directive: - newline inside string + %s <literal_block xml:space="preserve"> .. csv-table:: bad CSV header data :header: "bad", \"csv, data \n\ good, csv, data -"""], +""" % csv_eod_error_str], ["""\ .. csv-table:: bad encoding :file: %s This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mi...@us...> - 2013-06-04 12:46:34
|
Revision: 7668 http://sourceforge.net/p/docutils/code/7668 Author: milde Date: 2013-06-04 12:46:30 +0000 (Tue, 04 Jun 2013) Log Message: ----------- Consistently use "utf-8" (not "utf8") in magic comment giving source encoding. Fixes problems with Docutils installed in "virtualenv" https://sourceforge.net/p/docutils/patches/105/ Modified Paths: -------------- trunk/docutils/docutils/languages/lt.py trunk/docutils/docutils/parsers/rst/languages/lt.py trunk/docutils/docutils/transforms/universal.py trunk/docutils/docutils/utils/__init__.py trunk/docutils/docutils/utils/error_reporting.py trunk/docutils/docutils/utils/math/latex2mathml.py trunk/docutils/docutils/utils/math/tex2unichar.py trunk/docutils/docutils/utils/punctuation_chars.py trunk/docutils/docutils/utils/smartquotes.py trunk/docutils/docutils/writers/latex2e/__init__.py trunk/docutils/docutils/writers/xetex/__init__.py trunk/docutils/test/test__init__.py trunk/docutils/test/test_command_line.py trunk/docutils/test/test_error_reporting.py trunk/docutils/test/test_parsers/test_rst/test_TableParser.py trunk/docutils/test/test_parsers/test_rst/test_inline_markup.py trunk/docutils/test/test_transforms/test_smartquotes.py trunk/docutils/test/test_writers/test_latex2e.py Modified: trunk/docutils/docutils/languages/lt.py =================================================================== --- trunk/docutils/docutils/languages/lt.py 2013-06-03 10:11:36 UTC (rev 7667) +++ trunk/docutils/docutils/languages/lt.py 2013-06-04 12:46:30 UTC (rev 7668) @@ -1,4 +1,4 @@ -# -*- coding: utf8 -*- +# -*- coding: utf-8 -*- # $Id$ # Author: Dalius Dobravolskas <dalius.do...@gmail.com> # Copyright: This module has been placed in the public domain. @@ -59,7 +59,7 @@ author_separators = [';', ','] """List of separator strings for the 'Authors' bibliographic field. Tried in order.""" -# -*- coding: utf8 -*- +# -*- coding: utf-8 -*- # $Id$ # Author: David Goodger <go...@py...> # Copyright: This module has been placed in the public domain. Modified: trunk/docutils/docutils/parsers/rst/languages/lt.py =================================================================== --- trunk/docutils/docutils/parsers/rst/languages/lt.py 2013-06-03 10:11:36 UTC (rev 7667) +++ trunk/docutils/docutils/parsers/rst/languages/lt.py 2013-06-04 12:46:30 UTC (rev 7668) @@ -1,4 +1,4 @@ -# -*- coding: utf8 -*- +# -*- coding: utf-8 -*- # $Id$ # Author: Dalius Dobravolskas <dalius.do...@gmail.com> # Copyright: This module has been placed in the public domain. Modified: trunk/docutils/docutils/transforms/universal.py =================================================================== --- trunk/docutils/docutils/transforms/universal.py 2013-06-03 10:11:36 UTC (rev 7667) +++ trunk/docutils/docutils/transforms/universal.py 2013-06-04 12:46:30 UTC (rev 7668) @@ -1,5 +1,5 @@ # $Id$ -# -*- coding: utf8 -*- +# -*- coding: utf-8 -*- # Authors: David Goodger <go...@py...>; Ueli Schlaepfer; Günter Milde # Maintainer: doc...@li... # Copyright: This module has been placed in the public domain. Modified: trunk/docutils/docutils/utils/__init__.py =================================================================== --- trunk/docutils/docutils/utils/__init__.py 2013-06-03 10:11:36 UTC (rev 7667) +++ trunk/docutils/docutils/utils/__init__.py 2013-06-04 12:46:30 UTC (rev 7668) @@ -1,4 +1,4 @@ -# coding: utf8 +# coding: utf-8 # $Id$ # Author: David Goodger <go...@py...> # Copyright: This module has been placed in the public domain. Modified: trunk/docutils/docutils/utils/error_reporting.py =================================================================== --- trunk/docutils/docutils/utils/error_reporting.py 2013-06-03 10:11:36 UTC (rev 7667) +++ trunk/docutils/docutils/utils/error_reporting.py 2013-06-04 12:46:30 UTC (rev 7668) @@ -1,5 +1,5 @@ #!/usr/bin/env python -# -*- coding: utf8 -*- +# -*- coding: utf-8 -*- # :Id: $Id$ # :Copyright: © 2011 Günter Milde. Modified: trunk/docutils/docutils/utils/math/latex2mathml.py =================================================================== --- trunk/docutils/docutils/utils/math/latex2mathml.py 2013-06-03 10:11:36 UTC (rev 7667) +++ trunk/docutils/docutils/utils/math/latex2mathml.py 2013-06-04 12:46:30 UTC (rev 7668) @@ -1,5 +1,5 @@ #!/usr/bin/env python -# -*- coding: utf8 -*- +# -*- coding: utf-8 -*- # :Id: $Id$ # :Copyright: © 2010 Günter Milde. Modified: trunk/docutils/docutils/utils/math/tex2unichar.py =================================================================== --- trunk/docutils/docutils/utils/math/tex2unichar.py 2013-06-03 10:11:36 UTC (rev 7667) +++ trunk/docutils/docutils/utils/math/tex2unichar.py 2013-06-04 12:46:30 UTC (rev 7668) @@ -1,4 +1,4 @@ -# -*- coding: utf8 -*- +# -*- coding: utf-8 -*- # LaTeX math to Unicode symbols translation dictionaries. # Generated with ``write_tex2unichar.py`` from the data in Modified: trunk/docutils/docutils/utils/punctuation_chars.py =================================================================== --- trunk/docutils/docutils/utils/punctuation_chars.py 2013-06-03 10:11:36 UTC (rev 7667) +++ trunk/docutils/docutils/utils/punctuation_chars.py 2013-06-04 12:46:30 UTC (rev 7668) @@ -1,5 +1,5 @@ #!/usr/bin/env python -# -*- coding: utf8 -*- +# -*- coding: utf-8 -*- # :Copyright: © 2011 Günter Milde. # :License: Released under the terms of the `2-Clause BSD license`_, in short: # @@ -135,8 +135,8 @@ For each of the `catagories`, an item contains a list with all Unicode characters with `cp_min` <= code-point <= `cp_max` that belong to - the category. - + the category. + The default values check every code-point supported by Python (`sys.maxint` is 0x10FFFF in a "wide" build and 0xFFFF in a "narrow" build, i.e. ucs4 and ucs2 respectively). Modified: trunk/docutils/docutils/utils/smartquotes.py =================================================================== --- trunk/docutils/docutils/utils/smartquotes.py 2013-06-03 10:11:36 UTC (rev 7667) +++ trunk/docutils/docutils/utils/smartquotes.py 2013-06-04 12:46:30 UTC (rev 7668) @@ -1,5 +1,5 @@ #!/usr/bin/python -# -*- coding: utf8 -*- +# -*- coding: utf-8 -*- # :Id: $Id$ # :Copyright: © 2010 Günter Milde, Modified: trunk/docutils/docutils/writers/latex2e/__init__.py =================================================================== --- trunk/docutils/docutils/writers/latex2e/__init__.py 2013-06-03 10:11:36 UTC (rev 7667) +++ trunk/docutils/docutils/writers/latex2e/__init__.py 2013-06-04 12:46:30 UTC (rev 7668) @@ -1,4 +1,4 @@ -# .. coding: utf8 +# .. coding: utf-8 # $Id$ # Author: Engelbert Gruber, Günter Milde # Maintainer: doc...@li... Modified: trunk/docutils/docutils/writers/xetex/__init__.py =================================================================== --- trunk/docutils/docutils/writers/xetex/__init__.py 2013-06-03 10:11:36 UTC (rev 7667) +++ trunk/docutils/docutils/writers/xetex/__init__.py 2013-06-04 12:46:30 UTC (rev 7668) @@ -1,5 +1,5 @@ #!/usr/bin/env python -# -*- coding: utf8 -*- +# -*- coding: utf-8 -*- # :Author: Günter Milde <mi...@us...> # :Revision: $Revision$ Modified: trunk/docutils/test/test__init__.py =================================================================== --- trunk/docutils/test/test__init__.py 2013-06-03 10:11:36 UTC (rev 7667) +++ trunk/docutils/test/test__init__.py 2013-06-04 12:46:30 UTC (rev 7668) @@ -1,5 +1,5 @@ #! /usr/bin/env python -# .. coding: utf8 +# .. coding: utf-8 # $Id$ # Author: Günter Milde <mi...@us...> # Copyright: This module has been placed in the public domain. Modified: trunk/docutils/test/test_command_line.py =================================================================== --- trunk/docutils/test/test_command_line.py 2013-06-03 10:11:36 UTC (rev 7667) +++ trunk/docutils/test/test_command_line.py 2013-06-04 12:46:30 UTC (rev 7668) @@ -1,5 +1,5 @@ #! /usr/bin/env python -# .. coding: utf8 +# .. coding: utf-8 # $Id$ # Author: Günter Milde <mi...@us...> # Copyright: This module has been placed in the public domain. Modified: trunk/docutils/test/test_error_reporting.py =================================================================== --- trunk/docutils/test/test_error_reporting.py 2013-06-03 10:11:36 UTC (rev 7667) +++ trunk/docutils/test/test_error_reporting.py 2013-06-04 12:46:30 UTC (rev 7668) @@ -1,5 +1,5 @@ #! /usr/bin/env python -# .. coding: utf8 +# .. coding: utf-8 # $Id$ # Author: Günter Milde <mi...@us...> # Copyright: This module has been placed in the public domain. Modified: trunk/docutils/test/test_parsers/test_rst/test_TableParser.py =================================================================== --- trunk/docutils/test/test_parsers/test_rst/test_TableParser.py 2013-06-03 10:11:36 UTC (rev 7667) +++ trunk/docutils/test/test_parsers/test_rst/test_TableParser.py 2013-06-04 12:46:30 UTC (rev 7668) @@ -1,5 +1,5 @@ #! /usr/bin/env python -# coding: utf8 +# coding: utf-8 # $Id$ # Author: David Goodger <go...@py...> Modified: trunk/docutils/test/test_parsers/test_rst/test_inline_markup.py =================================================================== --- trunk/docutils/test/test_parsers/test_rst/test_inline_markup.py 2013-06-03 10:11:36 UTC (rev 7667) +++ trunk/docutils/test/test_parsers/test_rst/test_inline_markup.py 2013-06-04 12:46:30 UTC (rev 7668) @@ -1,5 +1,5 @@ #! /usr/bin/env python -# -*- coding: utf8 -*- +# -*- coding: utf-8 -*- # $Id$ # Author: David Goodger <go...@py...> Modified: trunk/docutils/test/test_transforms/test_smartquotes.py =================================================================== --- trunk/docutils/test/test_transforms/test_smartquotes.py 2013-06-03 10:11:36 UTC (rev 7667) +++ trunk/docutils/test/test_transforms/test_smartquotes.py 2013-06-04 12:46:30 UTC (rev 7668) @@ -1,5 +1,5 @@ #!/usr/bin/env python -# -*- coding: utf8 -*- +# -*- coding: utf-8 -*- # $Id$ # # :Copyright: © 2011 Günter Milde. Modified: trunk/docutils/test/test_writers/test_latex2e.py =================================================================== --- trunk/docutils/test/test_writers/test_latex2e.py 2013-06-03 10:11:36 UTC (rev 7667) +++ trunk/docutils/test/test_writers/test_latex2e.py 2013-06-04 12:46:30 UTC (rev 7668) @@ -1,4 +1,4 @@ -# -*- coding: utf8 -*- +# -*- coding: utf-8 -*- #! /usr/bin/env python # $Id$ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mi...@us...> - 2013-06-06 07:28:38
|
Revision: 7669 http://sourceforge.net/p/docutils/code/7669 Author: milde Date: 2013-06-06 07:28:35 +0000 (Thu, 06 Jun 2013) Log Message: ----------- Update Trac links. Modified Paths: -------------- trunk/docutils/FAQ.txt trunk/docutils/docs/user/links.txt Modified: trunk/docutils/FAQ.txt =================================================================== --- trunk/docutils/FAQ.txt 2013-06-04 12:46:30 UTC (rev 7668) +++ trunk/docutils/FAQ.txt 2013-06-06 07:28:35 UTC (rev 7669) @@ -423,11 +423,11 @@ * `StikiWiki <http://mithrandr.moria.org/code/stikiwiki/>`__ -* `Trac <http://projects.edgewall.com/trac/>`__ `supports using +* `Trac <http://trac.edgewall.com//>`__ `supports using reStructuredText - <http://projects.edgewall.com/trac/wiki/WikiRestructuredText>`__ as + <http://trac.edgewall.com//wiki/WikiRestructuredText>`__ as an alternative to wiki markup. This includes support for `TracLinks - <http://projects.edgewall.com/trac/wiki/TracLinks>`__ from within + <http://trac.edgewall.com//wiki/TracLinks>`__ from within RST text via a custom RST reference-directive or, even easier, an interpreted text role 'trac' Modified: trunk/docutils/docs/user/links.txt =================================================================== --- trunk/docutils/docs/user/links.txt 2013-06-04 12:46:30 UTC (rev 7668) +++ trunk/docutils/docs/user/links.txt 2013-06-06 07:28:35 UTC (rev 7669) @@ -248,7 +248,7 @@ * Trac_, a project management and bug/issue tracking system, supports `using reStructuredText - <http://projects.edgewall.com/trac/wiki/WikiRestructuredText>`__ as an + <http://trac.edgewall.org/wiki/WikiRestructuredText>`__ as an alternative to wiki markup. * PyLit_ provides a bidirectional text <--> code converter for *literate This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mi...@us...> - 2013-07-03 09:39:54
|
Revision: 7677 http://sourceforge.net/p/docutils/code/7677 Author: milde Date: 2013-07-03 09:39:52 +0000 (Wed, 03 Jul 2013) Log Message: ----------- Documentation update (links and tools). Modified Paths: -------------- trunk/docutils/FAQ.txt trunk/docutils/docs/user/links.txt trunk/docutils/docs/user/tools.txt Modified: trunk/docutils/FAQ.txt =================================================================== --- trunk/docutils/FAQ.txt 2013-06-22 11:25:15 UTC (rev 7676) +++ trunk/docutils/FAQ.txt 2013-07-03 09:39:52 UTC (rev 7677) @@ -447,6 +447,8 @@ * `Firedrop <http://www.voidspace.org.uk/python/firedrop2/>`__ * `PyBloxsom <http://pyblosxom.sourceforge.net/>`__ * `Lino WebMan <http://lino.sourceforge.net/webman.html>`__ +* `Pelican <http://blog.getpelican.com/>`__ + (also listed `on PyPi <http://pypi.python.org/pypi/pelican>`__) Please `let us know`_ of any other reStructuredText Blogs. Modified: trunk/docutils/docs/user/links.txt =================================================================== --- trunk/docutils/docs/user/links.txt 2013-06-22 11:25:15 UTC (rev 7676) +++ trunk/docutils/docs/user/links.txt 2013-07-03 09:39:52 UTC (rev 7677) @@ -113,8 +113,8 @@ created to translate the Python_ documentation, and is now `used by <http://sphinx.pocoo.org/examples.html>`__ a wide choice of projects. - Generates web sites (interlinked and indexed HTML pages) and/or PDF - from a set of rst source files. + It can generate complete web sites (interlinked and indexed HTML pages) + and/or PDF from a set of rst source files. * rst2ht_ by Oliver Rutherfurd, converts reStructuredText to an .ht template, for use with ht2html_. @@ -149,9 +149,11 @@ * restxsl_ by Michael Alyn Miller, lets you transform reStructuredText documents into XML/XHTML files using XSLT stylesheets. -* An `XSLT script`_ by Ladislav Lhotka enables reStructuredText annotations +* An `XSLT script`__ by Ladislav Lhotka enables reStructuredText annotations to be included in RELAG NG XML schemas. + __ http://www.cesnet.cz/doc/techzpravy/2006/rngrest/ + * `DocBook Writer`_ by Oliver Rutherfurd. * Nabu_, written by Martin Blais, is a publishing system which @@ -170,8 +172,11 @@ * For `confluence CMS`_ see https://github.com/cweiske/rst2confluence. -* Deploying into wikis might be aided by https://github.com/netresearch/deploy-rst. +* Deploying into wikis might be aided by deploy-rst__. + __ https://github.com/netresearch/deploy-rst + + Import ------ @@ -224,7 +229,7 @@ * zot4rst_ by Erik Hetzner is an extension that allows users to write reST documents using citations from a Zotero_ library. -* Quick and easy publishing reStructuredText source files as blog posts +* Quick and easy publishing reStructuredText source files as blog posts on blogger.com is possible with `rst2blogger`_ . Related Applications @@ -285,7 +290,6 @@ .. _PyLit: http://pylit.berlios.de .. _Pandoc: http://sophos.berkeley.edu/macfarlane/pandoc/ .. _restxsl: http://www.strangeGizmo.com/products/restxsl/ -.. _XSLT script: http://www.cesnet.cz/doc/techzpravy/2006/rngrest/ .. _ReSTedit: http://www.friday.com/bbum/index.php?s=restedit .. _ASCII art to SVG converter: http://docutils.sf.net/sandbox/cliechti/aafigure/ .. _LaTeX math for reST: Modified: trunk/docutils/docs/user/tools.txt =================================================================== --- trunk/docutils/docs/user/tools.txt 2013-06-22 11:25:15 UTC (rev 7676) +++ trunk/docutils/docs/user/tools.txt 2013-07-03 09:39:52 UTC (rev 7677) @@ -301,9 +301,12 @@ The ``rst2xml.py`` front end produces Docutils-native XML output. This can be transformed with standard XML tools such as XSLT -processors into arbitrary final forms. +processors into arbitrary final forms. An example is the xml2rst_ processor +in the Docutils sandbox. +.. _xml2rst: ../../../sandbox/xml2rst + ODF/OpenOffice-Generating Tools =============================== @@ -324,9 +327,16 @@ etc from `Odt Writer for Docutils <odt.html>`_. +reStructuredText-Generating Tools +================================= +Currently, there is no reStructuredText writer in Docutils and therefore +an ``rst2rst.py`` tool is still missing. +To generate reStructuredText documents with Docutils, you can use +the XML (Docutils native) writer and the xml2rst_ processor. + Testing/Debugging Tools ======================= This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gr...@us...> - 2013-07-13 17:56:56
|
Revision: 7685 http://sourceforge.net/p/docutils/code/7685 Author: grubert Date: 2013-07-13 17:56:54 +0000 (Sat, 13 Jul 2013) Log Message: ----------- Release 0.11: closed "Changes Since ..." section Modified Paths: -------------- trunk/docutils/HISTORY.txt trunk/docutils/RELEASE-NOTES.txt Modified: trunk/docutils/HISTORY.txt =================================================================== --- trunk/docutils/HISTORY.txt 2013-07-13 17:51:27 UTC (rev 7684) +++ trunk/docutils/HISTORY.txt 2013-07-13 17:56:54 UTC (rev 7685) @@ -13,8 +13,8 @@ .. contents:: -Changes Since 0.10 -================== +Release 0.11 (2013-07-13) +========================= * General Modified: trunk/docutils/RELEASE-NOTES.txt =================================================================== --- trunk/docutils/RELEASE-NOTES.txt 2013-07-13 17:51:27 UTC (rev 7684) +++ trunk/docutils/RELEASE-NOTES.txt 2013-07-13 17:56:54 UTC (rev 7685) @@ -29,8 +29,8 @@ element with class attribute and auto-generated title. -Changes Since 0.10 -================== +Release 0.11 (2013-07-13) +========================= * General This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |