1
0
forked from boostorg/mpl

More MPL refmanual doc generation fixes

[SVN r53744]
This commit is contained in:
Aleksey Gurtovoy
2009-06-08 11:16:27 +00:00
parent bade8a503a
commit e1c57fa777
5 changed files with 80 additions and 64 deletions

View File

@@ -1,5 +1,5 @@
# Copyright Aleksey Gurtovoy 2004-2008 # Copyright Aleksey Gurtovoy 2004-2009
# #
# Distributed under the Boost Software License, Version 1.0. # Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at # (See accompanying file LICENSE_1_0.txt or copy at
@@ -21,35 +21,76 @@ class Writer(html4_frames.Writer):
self.translator = refdoc_translator 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): 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): def __init__(self, document, index_page, page_files_dir, extension):
self.docframe += ' refmanual' self.docframe += ' refmanual'
self.__super = html4_frames.frame_pages_translator self.__super = html4_frames.frame_pages_translator
self.__super.__init__(self, document, index_page, page_files_dir, extension) 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): def visit_title( self, node ):
old_len = len(self.active_visitor().body) self.__super.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 = self.active_visitor()
if len(self.body) - old_len > 1 and not node.has_key('refid'): self.body.append( self.starttag(
name = nodes.make_id(node.astext())
self.body[-1] = self.starttag(
{}, 'a', '', name=name, href='#%s' % name, CLASS='subsection-title' {}, 'a', '', name=name, href='#%s' % name, CLASS='subsection-title'
) ) )
def depart_title(self, node): def depart_title( self, node ):
self.__super.depart_title(self, node) base = self
if self.re_auto_id.match( self._node_id( node.parent ) ):
self = self.active_visitor()
self.body.append( '</a>')
base.__super.depart_title( base, node )
def visit_table(self, 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): def _handle_id_sub(base, self, match):
identifier = match.group(2) identifier = match.group(2)
if not base.document.has_name( identifier.lower() ): if not base.document.has_name( identifier.lower() ):
return self.encode(match.group(0)) return self.encode(match.group(0))
@@ -182,9 +224,12 @@ class refdoc_translator(html4_frames.frame_pages_translator):
if not id: if not id:
return self.encode(match.group(0)) return self.encode(match.group(0))
if id == 'inserter':
id = 'inserter-class'
result = self.encode(match.group(1)) result = self.encode(match.group(1))
result += '<a href="%s" class="identifier">%s</a>' \ result += '<a href="%s" class="identifier">%s</a>' \
% ( base._chunk_ref( base._active_chunk_id(), id ) % ( base._chunk_ref( base._active_chunk_id(), base._make_chunk_id( id ) )
, self.encode(identifier) , self.encode(identifier)
) )
@@ -194,41 +239,15 @@ class refdoc_translator(html4_frames.frame_pages_translator):
return result return result
class hacked_html_translator(nodes.NodeVisitor): 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 __init__(self, document): if node_id.startswith( 'boost-mpl-' ):
self.__super = nodes.NodeVisitor return node_id[ len( 'boost-mpl-' ): ]
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): return node_id
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)
def _setup_forwarding(visitor): def _setup_forwarding(visitor):

View File

@@ -69,12 +69,11 @@ Example
Models Models
------ ------
* |inserter| * |[inserter]|
* |front_inserter| * |front_inserter|
* |back_inserter| * |back_inserter|
See also See also
-------- --------
|Algorithms|, |Transformation Algorithms|, |inserter|, |front_inserter|, |back_inserter| |Algorithms|, |Transformation Algorithms|, |[inserter]|, |front_inserter|, |back_inserter|

View File

@@ -91,4 +91,4 @@ Example
See also See also
-------- --------
|Algorithms|, |Inserter|, |Reversible Algorithm|, |inserter|, |front_inserter|, |push_back| |Algorithms|, |Inserter|, |Reversible Algorithm|, |[inserter]|, |front_inserter|, |push_back|

View File

@@ -91,4 +91,4 @@ Example
See also See also
-------- --------
|Algorithms|, |Inserter|, |Reversible Algorithm|, |inserter|, |back_inserter|, |push_front| |Algorithms|, |Inserter|, |Reversible Algorithm|, |[inserter]|, |back_inserter|, |push_front|

View File

@@ -5,11 +5,11 @@
.. Software License, Version 1.0. (See accompanying .. Software License, Version 1.0. (See accompanying
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) .. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|inserter(title)|
=================
.. _`inserter_`: .. _`inserter_`:
inserter (class)
================
Synopsis Synopsis
-------- --------
@@ -99,6 +99,4 @@ See also
|Algorithms|, |Inserter|, |Reversible Algorithm|, |front_inserter|, |back_inserter| |Algorithms|, |Inserter|, |Reversible Algorithm|, |front_inserter|, |back_inserter|
.. |[inserter]| replace:: `inserter (class)`_
.. |inserter(title)| replace:: inserter
.. |inserter| replace:: ':refentry:`inserter` <|inserter_|>'__