From e1c57fa7774a52c78466fbbff89561da8da99e85 Mon Sep 17 00:00:00 2001 From: Aleksey Gurtovoy Date: Mon, 8 Jun 2009 11:16:27 +0000 Subject: [PATCH] More MPL refmanual doc generation fixes [SVN r53744] --- .../docutils/writers/html4_refdoc/__init__.py | 125 ++++++++++-------- doc/src/refmanual/Inserter.rst | 5 +- doc/src/refmanual/back_inserter.rst | 2 +- doc/src/refmanual/front_inserter.rst | 2 +- doc/src/refmanual/inserter_.rst | 10 +- 5 files changed, 80 insertions(+), 64 deletions(-) diff --git a/doc/src/docutils/writers/html4_refdoc/__init__.py b/doc/src/docutils/writers/html4_refdoc/__init__.py index ba3395a..6790c86 100755 --- a/doc/src/docutils/writers/html4_refdoc/__init__.py +++ b/doc/src/docutils/writers/html4_refdoc/__init__.py @@ -1,5 +1,5 @@ -# Copyright Aleksey Gurtovoy 2004-2008 +# Copyright Aleksey Gurtovoy 2004-2009 # # Distributed under the Boost Software License, Version 1.0. # (See accompanying file LICENSE_1_0.txt or copy at @@ -21,35 +21,76 @@ class Writer(html4_frames.Writer): self.translator = refdoc_translator +class hacked_html_translator(nodes.NodeVisitor): + + def __init__(self, document): + self.__super = nodes.NodeVisitor + self.__super.__init__(self, document) + self.base = html4css1.HTMLTranslator(document) + self.body = self.base.body + self.head = self.base.head + self.astext = self.base.astext + self.starttag = self.base.starttag + self.words_and_spaces = self.base.words_and_spaces + self.encode = self.base.encode + self.recursion_level = 0 + + def visit_section(self, node): + if self.base.section_level == 1: + self.base.section_level = 2 + + self.base.body_prefix = self.body_prefix + self.base.visit_section(node) + + def depart_section(self, node): + self.base.depart_section(node) + if self.base.section_level == 2: + self.base.section_level = 1 + + + def visit_generated(self, node): + if node.get('class', '') == 'sectnum': + node[0].data = string.strip(node[0].data, u'\u00a0') + + self.base.visit_generated(node) + + def depart_generated(self, node): + self.base.depart_generated(node) + + class refdoc_translator(html4_frames.frame_pages_translator): - tocframe_width = 25 + tocframe_width = 25 + page_translator = hacked_html_translator + re_include = re.compile(r'(\s*#include\s+<)(.*?\.hpp)?(>\s*)?') + re_identifier = re.compile(r'(.*?\W*)(\w+)(\W.*?)?') + re_modtime = re.compile(r'\s*modtime:\s*(.*)') + re_auto_id = re.compile(r'^id(\d+)$') + in_literal_block = 0 + in_reference = 0 def __init__(self, document, index_page, page_files_dir, extension): self.docframe += ' refmanual' self.__super = html4_frames.frame_pages_translator self.__super.__init__(self, document, index_page, page_files_dir, extension) - self.page_translator = hacked_html_translator - self.re_include = re.compile(r'(\s*#include\s+<)(.*?\.hpp)?(>\s*)?') - self.re_identifier = re.compile(r'(.*?\W*)(\w+)(\W.*?)?') - self.re_modtime = re.compile(r'\s*modtime:\s*(.*)') - self.in_literal_block = 0 - self.in_reference = 0 - def visit_title(self, node): - old_len = len(self.active_visitor().body) - self.__super.visit_title(self, node) - - self = self.active_visitor() - if len(self.body) - old_len > 1 and not node.has_key('refid'): - name = nodes.make_id(node.astext()) - self.body[-1] = self.starttag( + def visit_title( self, node ): + self.__super.visit_title( self, node ) + if self.re_auto_id.match( self._node_id( node.parent ) ): + name = nodes.make_id( node.astext() ) + self = self.active_visitor() + self.body.append( self.starttag( {}, 'a', '', name=name, href='#%s' % name, CLASS='subsection-title' - ) + ) ) - def depart_title(self, node): - self.__super.depart_title(self, node) + def depart_title( self, node ): + base = self + if self.re_auto_id.match( self._node_id( node.parent ) ): + self = self.active_visitor() + self.body.append( '') + + base.__super.depart_title( base, node ) def visit_table(self, node): @@ -165,6 +206,7 @@ class refdoc_translator(html4_frames.frame_pages_translator): def _handle_id_sub(base, self, match): identifier = match.group(2) + if not base.document.has_name( identifier.lower() ): return self.encode(match.group(0)) @@ -182,9 +224,12 @@ class refdoc_translator(html4_frames.frame_pages_translator): if not id: return self.encode(match.group(0)) + if id == 'inserter': + id = 'inserter-class' + result = self.encode(match.group(1)) result += '%s' \ - % ( base._chunk_ref( base._active_chunk_id(), id ) + % ( base._chunk_ref( base._active_chunk_id(), base._make_chunk_id( id ) ) , self.encode(identifier) ) @@ -194,41 +239,15 @@ class refdoc_translator(html4_frames.frame_pages_translator): return result -class hacked_html_translator(nodes.NodeVisitor): - - def __init__(self, document): - self.__super = nodes.NodeVisitor - self.__super.__init__(self, document) - self.base = html4css1.HTMLTranslator(document) - self.body = self.base.body - self.head = self.base.head - self.astext = self.base.astext - self.starttag = self.base.starttag - self.words_and_spaces = self.base.words_and_spaces - self.encode = self.base.encode - self.recursion_level = 0 + def _make_chunk_id( self, node_id ): + if self.re_auto_id.match( node_id ): + node = self.document.ids[ node_id ] + return '%s-%s' % ( self._node_id( node.parent ), node['dupnames'][0] ) - def visit_section(self, node): - if self.base.section_level == 1: - self.base.section_level = 2 - - self.base.body_prefix = self.body_prefix - self.base.visit_section(node) - - def depart_section(self, node): - self.base.depart_section(node) - if self.base.section_level == 2: - self.base.section_level = 1 - + if node_id.startswith( 'boost-mpl-' ): + return node_id[ len( 'boost-mpl-' ): ] - def visit_generated(self, node): - if node.get('class', '') == 'sectnum': - node[0].data = string.strip(node[0].data, u'\u00a0') - - self.base.visit_generated(node) - - def depart_generated(self, node): - self.base.depart_generated(node) + return node_id def _setup_forwarding(visitor): diff --git a/doc/src/refmanual/Inserter.rst b/doc/src/refmanual/Inserter.rst index 9712f04..e0468f8 100644 --- a/doc/src/refmanual/Inserter.rst +++ b/doc/src/refmanual/Inserter.rst @@ -69,12 +69,11 @@ Example Models ------ -* |inserter| +* |[inserter]| * |front_inserter| * |back_inserter| See also -------- -|Algorithms|, |Transformation Algorithms|, |inserter|, |front_inserter|, |back_inserter| - +|Algorithms|, |Transformation Algorithms|, |[inserter]|, |front_inserter|, |back_inserter| diff --git a/doc/src/refmanual/back_inserter.rst b/doc/src/refmanual/back_inserter.rst index 79bba5a..e308c84 100644 --- a/doc/src/refmanual/back_inserter.rst +++ b/doc/src/refmanual/back_inserter.rst @@ -91,4 +91,4 @@ Example See also -------- -|Algorithms|, |Inserter|, |Reversible Algorithm|, |inserter|, |front_inserter|, |push_back| +|Algorithms|, |Inserter|, |Reversible Algorithm|, |[inserter]|, |front_inserter|, |push_back| diff --git a/doc/src/refmanual/front_inserter.rst b/doc/src/refmanual/front_inserter.rst index 3bd4e14..518eb10 100644 --- a/doc/src/refmanual/front_inserter.rst +++ b/doc/src/refmanual/front_inserter.rst @@ -91,4 +91,4 @@ Example See also -------- -|Algorithms|, |Inserter|, |Reversible Algorithm|, |inserter|, |back_inserter|, |push_front| +|Algorithms|, |Inserter|, |Reversible Algorithm|, |[inserter]|, |back_inserter|, |push_front| diff --git a/doc/src/refmanual/inserter_.rst b/doc/src/refmanual/inserter_.rst index ecdfee5..8dcc638 100644 --- a/doc/src/refmanual/inserter_.rst +++ b/doc/src/refmanual/inserter_.rst @@ -5,11 +5,11 @@ .. Software License, Version 1.0. (See accompanying .. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -|inserter(title)| -================= - .. _`inserter_`: +inserter (class) +================ + Synopsis -------- @@ -99,6 +99,4 @@ See also |Algorithms|, |Inserter|, |Reversible Algorithm|, |front_inserter|, |back_inserter| - -.. |inserter(title)| replace:: inserter -.. |inserter| replace:: ':refentry:`inserter` <|inserter_|>'__ +.. |[inserter]| replace:: `inserter (class)`_