summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgeorg.brandl <devnull@localhost>2008-03-18 19:34:25 +0000
committergeorg.brandl <devnull@localhost>2008-03-18 19:34:25 +0000
commit740aae36e8251ef299acf657d74ea816a8caa7a6 (patch)
tree2478579164830f114edcd713d3f500dc808dcc42
parent8d09e328ae8d30a236aac0f66517cbeac5df2863 (diff)
downloadsphinx-740aae36e8251ef299acf657d74ea816a8caa7a6.tar.gz
Move converter to its own dir.
-rw-r--r--converter/__init__.py144
-rw-r--r--converter/console.py101
-rw-r--r--converter/docnodes.py297
-rw-r--r--converter/etc/inst.diff122
-rw-r--r--converter/filenamemap.py636
-rw-r--r--converter/latexparser.py697
-rw-r--r--converter/newfiles/ACKS197
-rw-r--r--converter/newfiles/TODO18
-rw-r--r--converter/newfiles/about.rst18
-rw-r--r--converter/newfiles/api_index.rst33
-rw-r--r--converter/newfiles/conf.py47
-rw-r--r--converter/newfiles/contents.rst21
-rw-r--r--converter/newfiles/dist_index.rst28
-rw-r--r--converter/newfiles/doc.rst33
-rw-r--r--converter/newfiles/doc_intro.rst29
-rw-r--r--converter/newfiles/doc_markup.rst742
-rw-r--r--converter/newfiles/doc_rest.rst232
-rw-r--r--converter/newfiles/doc_sphinx.rst60
-rw-r--r--converter/newfiles/doc_style.rst57
-rw-r--r--converter/newfiles/ext_index.rst34
-rw-r--r--converter/newfiles/mac_index.rst34
-rw-r--r--converter/newfiles/modules_index.rst73
-rw-r--r--converter/newfiles/ref_index.rst30
-rw-r--r--converter/newfiles/tutorial_index.rst60
-rw-r--r--converter/restwriter.py962
-rw-r--r--converter/scanner.py97
-rw-r--r--converter/tokenizer.py124
-rw-r--r--converter/util.py100
28 files changed, 0 insertions, 5026 deletions
diff --git a/converter/__init__.py b/converter/__init__.py
deleted file mode 100644
index 46f10322..00000000
--- a/converter/__init__.py
+++ /dev/null
@@ -1,144 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
- Documentation converter - high level functions
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- :copyright: 2007-2008 by Georg Brandl.
- :license: BSD.
-"""
-
-import sys
-import os
-import glob
-import shutil
-import codecs
-from os import path
-
-from .tokenizer import Tokenizer
-from .latexparser import DocParser
-from .restwriter import RestWriter
-from .filenamemap import (fn_mapping, copyfiles_mapping, newfiles_mapping,
- rename_mapping, dirs_to_make, toctree_mapping,
- amendments_mapping)
-from .console import red, green
-
-def convert_file(infile, outfile, doraise=True, splitchap=False,
- toctree=None, deflang=None, labelprefix=''):
- inf = codecs.open(infile, 'r', 'latin1')
- p = DocParser(Tokenizer(inf.read()).tokenize(), infile)
- if not splitchap:
- outf = codecs.open(outfile, 'w', 'utf-8')
- else:
- outf = None
- r = RestWriter(outf, splitchap, toctree, deflang, labelprefix)
- try:
- r.write_document(p.parse())
- if splitchap:
- for i, chapter in enumerate(r.chapters[1:]):
- coutf = codecs.open('%s/%d_%s' % (
- path.dirname(outfile), i+1, path.basename(outfile)),
- 'w', 'utf-8')
- coutf.write(chapter.getvalue())
- coutf.close()
- else:
- outf.close()
- return 1, r.warnings
- except Exception, err:
- if doraise:
- raise
- return 0, str(err)
-
-
-def convert_dir(outdirname, *args):
- # make directories
- for dirname in dirs_to_make:
- try:
- os.mkdir(path.join(outdirname, dirname))
- except OSError:
- pass
-
- # copy files (currently only non-tex includes)
- for oldfn, newfn in copyfiles_mapping.iteritems():
- newpathfn = path.join(outdirname, newfn)
- globfns = glob.glob(oldfn)
- if len(globfns) == 1 and not path.isdir(newpathfn):
- shutil.copyfile(globfns[0], newpathfn)
- else:
- for globfn in globfns:
- shutil.copyfile(globfn, path.join(newpathfn,
- path.basename(globfn)))
-
- # convert tex files
- # "doc" is not converted. It must be rewritten anyway.
- for subdir in ('api', 'dist', 'ext', 'inst', 'commontex',
- 'lib', 'mac', 'ref', 'tut', 'whatsnew'):
- if args and subdir not in args:
- continue
- if subdir not in fn_mapping:
- continue
- newsubdir = fn_mapping[subdir]['__newname__']
- deflang = fn_mapping[subdir].get('__defaulthighlightlang__')
- labelprefix = fn_mapping[subdir].get('__labelprefix__', '')
- for filename in sorted(os.listdir(subdir)):
- if not filename.endswith('.tex'):
- continue
- filename = filename[:-4] # strip extension
- newname = fn_mapping[subdir][filename]
- if newname is None:
- continue
- if newname.endswith(':split'):
- newname = newname[:-6]
- splitchap = True
- else:
- splitchap = False
- if '/' not in newname:
- outfilename = path.join(outdirname, newsubdir, newname + '.rst')
- else:
- outfilename = path.join(outdirname, newname + '.rst')
- toctree = toctree_mapping.get(path.join(subdir, filename))
- infilename = path.join(subdir, filename + '.tex')
- print green(infilename),
- success, state = convert_file(infilename, outfilename, False,
- splitchap, toctree, deflang, labelprefix)
- if not success:
- print red("ERROR:")
- print red(" " + state)
- else:
- if state:
- print "warnings:"
- for warning in state:
- print " " + warning
-
- # rename files, e.g. splitted ones
- for oldfn, newfn in rename_mapping.iteritems():
- try:
- if newfn is None:
- os.unlink(path.join(outdirname, oldfn))
- else:
- os.rename(path.join(outdirname, oldfn),
- path.join(outdirname, newfn))
- except OSError, err:
- if err.errno == 2:
- continue
- raise
-
- # copy new files
- srcdirname = path.join(path.dirname(__file__), 'newfiles')
- for fn, newfn in newfiles_mapping.iteritems():
- shutil.copyfile(path.join(srcdirname, fn),
- path.join(outdirname, newfn))
-
- # make amendments
- for newfn, (pre, post) in amendments_mapping.iteritems():
- fn = path.join(outdirname, newfn)
- try:
- ft = open(fn).read()
- except Exception, err:
- print "Error making amendments to %s: %s" % (newfn, err)
- continue
- else:
- fw = open(fn, 'w')
- fw.write(pre)
- fw.write(ft)
- fw.write(post)
- fw.close()
diff --git a/converter/console.py b/converter/console.py
deleted file mode 100644
index a5e201a7..00000000
--- a/converter/console.py
+++ /dev/null
@@ -1,101 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
- Console utils
- ~~~~~~~~~~~~~
-
- Format colored console output.
-
- :copyright: 1998-2004 by the Gentoo Foundation.
- :copyright: 2006-2007 by Georg Brandl.
- :license: GNU GPL.
-"""
-
-esc_seq = "\x1b["
-
-codes = {}
-codes["reset"] = esc_seq + "39;49;00m"
-
-codes["bold"] = esc_seq + "01m"
-codes["faint"] = esc_seq + "02m"
-codes["standout"] = esc_seq + "03m"
-codes["underline"] = esc_seq + "04m"
-codes["blink"] = esc_seq + "05m"
-codes["overline"] = esc_seq + "06m" # Who made this up? Seriously.
-
-ansi_color_codes = []
-for x in xrange(30, 38):
- ansi_color_codes.append("%im" % x)
- ansi_color_codes.append("%i;01m" % x)
-
-rgb_ansi_colors = [
- '0x000000', '0x555555', '0xAA0000', '0xFF5555',
- '0x00AA00', '0x55FF55', '0xAA5500', '0xFFFF55',
- '0x0000AA', '0x5555FF', '0xAA00AA', '0xFF55FF',
- '0x00AAAA', '0x55FFFF', '0xAAAAAA', '0xFFFFFF'
-]
-
-for x in xrange(len(rgb_ansi_colors)):
- codes[rgb_ansi_colors[x]] = esc_seq + ansi_color_codes[x]
-
-del x
-
-codes["black"] = codes["0x000000"]
-codes["darkgray"] = codes["0x555555"]
-
-codes["red"] = codes["0xFF5555"]
-codes["darkred"] = codes["0xAA0000"]
-
-codes["green"] = codes["0x55FF55"]
-codes["darkgreen"] = codes["0x00AA00"]
-
-codes["yellow"] = codes["0xFFFF55"]
-codes["brown"] = codes["0xAA5500"]
-
-codes["blue"] = codes["0x5555FF"]
-codes["darkblue"] = codes["0x0000AA"]
-
-codes["fuchsia"] = codes["0xFF55FF"]
-codes["purple"] = codes["0xAA00AA"]
-
-codes["teal"] = codes["0x00AAAA"]
-codes["turquoise"] = codes["0x55FFFF"]
-
-codes["white"] = codes["0xFFFFFF"]
-codes["lightgray"] = codes["0xAAAAAA"]
-
-codes["darkteal"] = codes["turquoise"]
-codes["darkyellow"] = codes["brown"]
-codes["fuscia"] = codes["fuchsia"]
-codes["white"] = codes["bold"]
-
-def nocolor():
- "turn off colorization"
- for code in codes:
- codes[code] = ""
-
-def reset_color():
- return codes["reset"]
-
-def colorize(color_key, text):
- return codes[color_key] + text + codes["reset"]
-
-functions_colors = [
- "bold", "white", "teal", "turquoise", "darkteal",
- "fuscia", "fuchsia", "purple", "blue", "darkblue",
- "green", "darkgreen", "yellow", "brown",
- "darkyellow", "red", "darkred"
-]
-
-def create_color_func(color_key):
- """
- Return a function that formats its argument in the given color.
- """
- def derived_func(text):
- return colorize(color_key, text)
- return derived_func
-
-ns = locals()
-for c in functions_colors:
- ns[c] = create_color_func(c)
-
-del c, ns
diff --git a/converter/docnodes.py b/converter/docnodes.py
deleted file mode 100644
index 85ca2625..00000000
--- a/converter/docnodes.py
+++ /dev/null
@@ -1,297 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
- Python documentation LaTeX parser - document nodes
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- :copyright: 2007-2008 by Georg Brandl.
- :license: BSD.
-"""
-
-
-class DocNode(object):
- """ A node in the document tree. """
- def __repr__(self):
- return '%s()' % self.__class__.__name__
-
- def __str__(self):
- raise RuntimeError('cannot stringify docnodes')
-
- def walk(self):
- return []
-
-
-class CommentNode(DocNode):
- """ A comment. """
- def __init__(self, comment):
- assert isinstance(comment, basestring)
- self.comment = comment
-
- def __repr__(self):
- return 'CommentNode(%r)' % self.comment
-
-
-class RootNode(DocNode):
- """ A whole document. """
- def __init__(self, filename, children):
- self.filename = filename
- self.children = children
- self.params = {}
- self.labels = {}
-
- def __repr__(self):
- return 'RootNode(%r, %r)' % (self.filename, self.children)
-
- def walk(self):
- return self.children
-
- def transform(self):
- """ Do restructurings not possible during parsing. """
- def do_descenvs(node):
- r""" Make \xxxlines an attribute of the parent xxxdesc node. """
- for subnode in node.walk():
- do_descenvs(subnode)
- if isinstance(node, DescEnvironmentNode):
- for subnode in node.content.walk():
- if isinstance(subnode, DescLineCommandNode):
- node.additional.append((subnode.cmdname, subnode.args))
-
- do_descenvs(self)
-
-
-class NodeList(DocNode, list):
- """ A list of subnodes. """
- def __init__(self, children=None):
- list.__init__(self, children or [])
-
- def __repr__(self):
- return 'NL%s' % list.__repr__(self)
-
- def walk(self):
- return self
-
- def append(self, node):
- assert isinstance(node, DocNode)
- if type(node) is EmptyNode:
- return
- elif self and isinstance(node, TextNode) and \
- type(self[-1]) is TextNode:
- self[-1].text += node.text
- elif type(node) is NodeList:
- list.extend(self, node)
- elif type(node) is VerbatimNode and self and \
- isinstance(self[-1], ParaSepNode):
- # don't allow a ParaSepNode before VerbatimNode
- # because this breaks ReST's '::'
- self[-1] = node
- else:
- list.append(self, node)
-
- def flatten(self):
- if len(self) > 1:
- return self
- elif len(self) == 1:
- return self[0]
- else:
- return EmptyNode()
-
-
-class ParaSepNode(DocNode):
- """ A node for paragraph separator. """
- def __repr__(self):
- return 'Para'
-
-
-class TextNode(DocNode):
- """ A node containing text. """
- def __init__(self, text):
- assert isinstance(text, basestring)
- self.text = text
-
- def __repr__(self):
- if type(self) is TextNode:
- return 'T%r' % self.text
- else:
- return '%s(%r)' % (self.__class__.__name__, self.text)
-
-
-class EmptyNode(TextNode):
- """ An empty node. """
- def __init__(self, *args):
- self.text = ''
-
-
-class NbspNode(TextNode):
- """ A non-breaking space. """
- def __init__(self, *args):
- # this breaks ReST markup (!)
- #self.text = u'\N{NO-BREAK SPACE}'
- self.text = ' '
-
- def __repr__(self):
- return 'NBSP'
-
-
-simplecmd_mapping = {
- 'ldots': u'...',
- 'moreargs': '...',
- 'unspecified': '...',
- 'ASCII': 'ASCII',
- 'UNIX': 'Unix',
- 'Unix': 'Unix',
- 'POSIX': 'POSIX',
- 'LaTeX': 'LaTeX',
- 'EOF': 'EOF',
- 'Cpp': 'C++',
- 'C': 'C',
- 'sub': u'--> ',
- 'textbackslash': '\\\\',
- 'textunderscore': '_',
- 'texteuro': u'\N{EURO SIGN}',
- 'textasciicircum': u'^',
- 'textasciitilde': u'~',
- 'textgreater': '>',
- 'textless': '<',
- 'textbar': '|',
- 'backslash': '\\\\',
- 'tilde': '~',
- 'copyright': u'\N{COPYRIGHT SIGN}',
- # \e is mostly inside \code and therefore not escaped.
- 'e': '\\',
- 'infinity': u'\N{INFINITY}',
- 'plusminus': u'\N{PLUS-MINUS SIGN}',
- 'leq': u'\N{LESS-THAN OR EQUAL TO}',
- 'geq': u'\N{GREATER-THAN OR EQUAL TO}',
- 'pi': u'\N{GREEK SMALL LETTER PI}',
- 'AA': u'\N{LATIN CAPITAL LETTER A WITH RING ABOVE}',
-}
-
-class SimpleCmdNode(TextNode):
- """ A command resulting in simple text. """
- def __init__(self, cmdname, args):
- self.text = simplecmd_mapping[cmdname]
-
-
-class BreakNode(DocNode):
- """ A line break. """
- def __repr__(self):
- return 'BR'
-
-
-class CommandNode(DocNode):
- """ A general command. """
- def __init__(self, cmdname, args):
- self.cmdname = cmdname
- self.args = args
-
- def __repr__(self):
- return '%s(%r, %r)' % (self.__class__.__name__, self.cmdname, self.args)
-
- def walk(self):
- return self.args
-
-
-class DescLineCommandNode(CommandNode):
- """ A \\xxxline command. """
-
-
-class InlineNode(CommandNode):
- """ A node with inline markup. """
- def walk(self):
- return []
-
-
-class IndexNode(InlineNode):
- """ An index-generating command. """
- def __init__(self, cmdname, args):
- self.cmdname = cmdname
- # tricky -- this is to make this silent in paragraphs
- # while still generating index entries for textonly()
- self.args = []
- self.indexargs = args
-
-
-class SectioningNode(CommandNode):
- """ A heading node. """
-
-
-class EnvironmentNode(DocNode):
- """ An environment. """
- def __init__(self, envname, args, content):
- self.envname = envname
- self.args = args
- self.content = content
-
- def __repr__(self):
- return 'EnvironmentNode(%r, %r, %r)' % (self.envname,
- self.args, self.content)
-
- def walk(self):
- return [self.content]
-
-
-class DescEnvironmentNode(EnvironmentNode):
- """ An xxxdesc environment. """
- def __init__(self, envname, args, content):
- self.envname = envname
- self.args = args
- self.additional = []
- self.content = content
-
- def __repr__(self):
- return 'DescEnvironmentNode(%r, %r, %r)' % (self.envname,
- self.args, self.content)
-
-
-class TableNode(EnvironmentNode):
- def __init__(self, numcols, headings, lines):
- self.numcols = numcols
- self.headings = headings
- self.lines = lines
-
- def __repr__(self):
- return 'TableNode(%r, %r, %r)' % (self.numcols,
- self.headings, self.lines)
-
- def walk(self):
- return []
-
-
-class VerbatimNode(DocNode):
- """ A verbatim code block. """
- def __init__(self, content):
- self.content = content
-
- def __repr__(self):
- return 'VerbatimNode(%r)' % self.content
-
-
-class ListNode(DocNode):
- """ A list. """
- def __init__(self, items):
- self.items = items
-
- def __repr__(self):
- return '%s(%r)' % (self.__class__.__name__, self.items)
-
- def walk(self):
- return [item[1] for item in self.items]
-
-
-class ItemizeNode(ListNode):
- """ An enumeration with bullets. """
-
-
-class EnumerateNode(ListNode):
- """ An enumeration with numbers. """
-
-
-class DescriptionNode(ListNode):
- """ A description list. """
-
-
-class DefinitionsNode(ListNode):
- """ A definition list. """
-
-
-class ProductionListNode(ListNode):
- """ A grammar production list. """
diff --git a/converter/etc/inst.diff b/converter/etc/inst.diff
deleted file mode 100644
index 30f41404..00000000
--- a/converter/etc/inst.diff
+++ /dev/null
@@ -1,122 +0,0 @@
-Index: inst/inst.tex
-===================================================================
---- inst/inst.tex (Revision 54633)
-+++ inst/inst.tex (Arbeitskopie)
-@@ -324,32 +324,6 @@
- section~\ref{custom-install} on custom installations.
-
-
--% This rather nasty macro is used to generate the tables that describe
--% each installation scheme. It's nasty because it takes two arguments
--% for each "slot" in an installation scheme, there will soon be more
--% than five of these slots, and TeX has a limit of 10 arguments to a
--% macro. Uh-oh.
--
--\newcommand{\installscheme}[8]
-- {\begin{tableiii}{l|l|l}{textrm}
-- {Type of file}
-- {Installation Directory}
-- {Override option}
-- \lineiii{pure module distribution}
-- {\filevar{#1}\filenq{#2}}
-- {\longprogramopt{install-purelib}}
-- \lineiii{non-pure module distribution}
-- {\filevar{#3}\filenq{#4}}
-- {\longprogramopt{install-platlib}}
-- \lineiii{scripts}
-- {\filevar{#5}\filenq{#6}}
-- {\longprogramopt{install-scripts}}
-- \lineiii{data}
-- {\filevar{#7}\filenq{#8}}
-- {\longprogramopt{install-data}}
-- \end{tableiii}}
--
--
- \section{Alternate Installation}
- \label{alt-install}
-
-@@ -399,10 +373,23 @@
- The \longprogramopt{home} option defines the installation base
- directory. Files are installed to the following directories under the
- installation base as follows:
--\installscheme{home}{/lib/python}
-- {home}{/lib/python}
-- {home}{/bin}
-- {home}{/share}
-+\begin{tableiii}{l|l|l}{textrm}
-+ {Type of file}
-+ {Installation Directory}
-+ {Override option}
-+ \lineiii{pure module distribution}
-+ {\filevar{home}\filenq{/lib/python}}
-+ {\longprogramopt{install-purelib}}
-+ \lineiii{non-pure module distribution}
-+ {\filevar{home}\filenq{/lib/python}}
-+ {\longprogramopt{install-platlib}}
-+ \lineiii{scripts}
-+ {\filevar{home}\filenq{/bin}}
-+ {\longprogramopt{install-scripts}}
-+ \lineiii{data}
-+ {\filevar{home}\filenq{/share}}
-+ {\longprogramopt{install-data}}
-+\end{tableiii}
-
-
- \versionchanged[The \longprogramopt{home} option used to be supported
-@@ -452,10 +439,23 @@
- etc.) If \longprogramopt{exec-prefix} is not supplied, it defaults to
- \longprogramopt{prefix}. Files are installed as follows:
-
--\installscheme{prefix}{/lib/python2.\filevar{X}/site-packages}
-- {exec-prefix}{/lib/python2.\filevar{X}/site-packages}
-- {prefix}{/bin}
-- {prefix}{/share}
-+\begin{tableiii}{l|l|l}{textrm}
-+ {Type of file}
-+ {Installation Directory}
-+ {Override option}
-+ \lineiii{pure module distribution}
-+ {\filevar{prefix}\filenq{/lib/python2.\filevar{X}/site-packages}}
-+ {\longprogramopt{install-purelib}}
-+ \lineiii{non-pure module distribution}
-+ {\filevar{exec-prefix}\filenq{/lib/python2.\filevar{X}/site-packages}}
-+ {\longprogramopt{install-platlib}}
-+ \lineiii{scripts}
-+ {\filevar{prefix}\filenq{/bin}}
-+ {\longprogramopt{install-scripts}}
-+ \lineiii{data}
-+ {\filevar{prefix}\filenq{/share}}
-+ {\longprogramopt{install-data}}
-+\end{tableiii}
-
- There is no requirement that \longprogramopt{prefix} or
- \longprogramopt{exec-prefix} actually point to an alternate Python
-@@ -502,11 +502,24 @@
- The installation base is defined by the \longprogramopt{prefix} option;
- the \longprogramopt{exec-prefix} option is not supported under Windows.
- Files are installed as follows:
--\installscheme{prefix}{}
-- {prefix}{}
-- {prefix}{\textbackslash{}Scripts}
-- {prefix}{\textbackslash{}Data}
-
-+\begin{tableiii}{l|l|l}{textrm}
-+ {Type of file}
-+ {Installation Directory}
-+ {Override option}
-+ \lineiii{pure module distribution}
-+ {\filevar{prefix}\filenq{}}
-+ {\longprogramopt{install-purelib}}
-+ \lineiii{non-pure module distribution}
-+ {\filevar{prefix}\filenq{}}
-+ {\longprogramopt{install-platlib}}
-+ \lineiii{scripts}
-+ {\filevar{prefix}\filenq{\textbackslash{}Scripts}}
-+ {\longprogramopt{install-scripts}}
-+ \lineiii{data}
-+ {\filevar{prefix}\filenq{\textbackslash{}Data}}
-+ {\longprogramopt{install-data}}
-+\end{tableiii}
-
-
- \section{Custom Installation}
diff --git a/converter/filenamemap.py b/converter/filenamemap.py
deleted file mode 100644
index 0d743b41..00000000
--- a/converter/filenamemap.py
+++ /dev/null
@@ -1,636 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
- Map LaTeX filenames to ReST filenames
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- :copyright: 2007-2008 by Georg Brandl.
- :license: BSD.
-"""
-
-# '' means: use same name, strip prefix if applicable.
-# None means: don't translate at all.
-
-_mapping = {
- 'lib': {
- '__newname__' : 'library',
-
- 'asttable': '',
- 'compiler': '',
- 'distutils': '',
- 'email': '',
- 'emailcharsets': 'email.charset',
- 'emailencoders': 'email.encoders',
- 'emailexc': 'email.errors',
- 'emailgenerator': 'email.generator',
- 'emailheaders': 'email.header',
- 'emailiter': 'email.iterators',
- 'emailmessage': 'email.message',
- 'emailmimebase': 'email.mime',
- 'emailparser': 'email.parser',
- 'emailutil': 'email.util',
- 'libaifc': '',
- 'libanydbm': '',
- 'libarray': '',
- 'libascii': 'curses.ascii',
- 'libast': '',
- 'libasynchat': '',
- 'libasyncore': '',
- 'libatexit': '',
- 'libaudioop': '',
- 'libbase64': '',
- 'libbasehttp': 'basehttpserver',
- 'libbastion': '',
- 'libbinascii': '',
- 'libbinhex': '',
- 'libbisect': '',
- 'libbltin': '__builtin__',
- 'libbsddb': '',
- 'libbz2': '',
- 'libcalendar': '',
- 'libcfgparser': 'configparser',
- 'libcgihttp': 'cgihttpserver',
- 'libcgi': '',
- 'libcgitb': '',
- 'libchunk': '',
- 'libcmath': '',
- 'libcmd': '',
- 'libcodecs': '',
- 'libcodeop': '',
- 'libcode': '',
- 'libcollections': '',
- 'libcolorsys': '',
- 'libcommands': '',
- 'libcompileall': '',
- 'libcontextlib': '',
- 'libcookielib': '',
- 'libcookie': '',
- 'libcopyreg': 'copy_reg',
- 'libcopy': '',
- 'libcrypt': '',
- 'libcsv': '',
- 'libctypes': '',
- 'libcursespanel': 'curses.panel',
- 'libcurses': '',
- 'libdatetime': '',
- 'libdbhash': '',
- 'libdbm': '',
- 'libdecimal': '',
- 'libdifflib': '',
- 'libdircache': '',
- 'libdis': '',
- 'libdl': '',
- 'libdoctest': '',
- 'libdocxmlrpc': 'docxmlrpcserver',
- 'libdumbdbm': '',
- 'libdummythreading': 'dummy_threading',
- 'libdummythread': 'dummy_thread',
- 'liberrno': '',
- 'libetree': 'xml.etree.elementtree',
- 'libfcntl': '',
- 'libfilecmp': '',
- 'libfileinput': '',
- 'libfnmatch': '',
- 'libformatter': '',
- 'libfpectl': '',
- 'libfpformat': '',
- 'libftplib': '',
- 'libfunctools': '',
- 'libfuture': '__future__',
- 'libgc': '',
- 'libgdbm': '',
- 'libgetopt': '',
- 'libgetpass': '',
- 'libgettext': '',
- 'libglob': '',
- 'libgrp': '',
- 'libgzip': '',
- 'libhashlib': '',
- 'libheapq': '',
- 'libhmac': '',
- 'libhotshot': '',
- 'libhtmllib': '',
- 'libhtmlparser': '',
- 'libhttplib': '',
- 'libimageop': '',
- 'libimaplib': '',
- 'libimgfile': '',
- 'libimghdr': '',
- 'libimp': '',
- 'libinspect': '',
- 'libitertools': '',
- 'libjpeg': '',
- 'libkeyword': '',
- 'liblinecache': '',
- 'liblocale': '',
- 'liblogging': '',
- 'libmailbox': '',
- 'libmailcap': '',
- 'libmain': '__main__',
- 'libmarshal': '',
- 'libmath': '',
- 'libmd5': '',
- 'libmhlib': '',
- 'libmimetools': '',
- 'libmimetypes': '',
- 'libmimewriter': '',
- 'libmimify': '',
- 'libmmap': '',
- 'libmodulefinder': '',
- 'libmsilib': '',
- 'libmsvcrt': '',
- 'libmultifile': '',
- 'libmutex': '',
- 'libnetrc': '',
- 'libnew': '',
- 'libnis': '',
- 'libnntplib': '',
- 'liboperator': '',
- 'liboptparse': '',
- 'libos': '',
- 'libossaudiodev': '',
- 'libparser': '',
- 'libpdb': '',
- 'libpickle': '',
- 'libpickletools': '',
- 'libpipes': '',
- 'libpkgutil': '',
- 'libplatform': '',
- 'libpopen2': '',
- 'libpoplib': '',
- 'libposixpath': 'os.path',
- 'libposix': '',
- 'libpprint': '',
- 'libprofile': '',
- 'libpty': '',
- 'libpwd': '',
- 'libpyclbr': '',
- 'libpycompile': 'py_compile',
- 'libpydoc': '',
- 'libpyexpat': '',
- 'libqueue': '',
- 'libquopri': '',
- 'librandom': '',
- 'libreadline': '',
- 'librepr': '',
- 'libre': '',
- 'libresource': '',
- 'librexec': '',
- 'librfc822': '',
- 'librlcompleter': '',
- 'librobotparser': '',
- 'librunpy': '',
- 'libsched': '',
- 'libselect': '',
- 'libsets': '',
- 'libsgmllib': '',
- 'libsha': '',
- 'libshelve': '',
- 'libshlex': '',
- 'libshutil': '',
- 'libsignal': '',
- 'libsimplehttp': 'simplehttpserver',
- 'libsimplexmlrpc': 'simplexmlrpcserver',
- 'libsite': '',
- 'libsmtpd': '',
- 'libsmtplib': '',
- 'libsndhdr': '',
- 'libsocket': '',
- 'libsocksvr': 'socketserver',
- 'libspwd': '',
- 'libsqlite3': '',
- 'libstat': '',
- 'libstatvfs': '',
- 'libstringio': '',
- 'libstringprep': '',
- 'libstring': '',
- 'libstruct': '',
- 'libsunaudio': '',
- 'libsunau': '',
- 'libsubprocess': '',
- 'libsymbol': '',
- 'libsyslog': '',
- 'libsys': '',
- 'libtabnanny': '',
- 'libtarfile': '',
- 'libtelnetlib': '',
- 'libtempfile': '',
- 'libtermios': '',
- 'libtest': '',
- 'libtextwrap': '',
- 'libthreading': '',
- 'libthread': '',
- 'libtimeit': '',
- 'libtime': '',
- 'libtokenize': '',
- 'libtoken': '',
- 'libtraceback': '',
- 'libtrace': '',
- 'libtty': '',
- 'libturtle': '',
- 'libtypes': '',
- 'libunicodedata': '',
- 'libunittest': '',
- 'liburllib2': '',
- 'liburllib': '',
- 'liburlparse': '',
- 'libuserdict': '',
- 'libuser': '',
- 'libuuid': '',
- 'libuu': '',
- 'libwarnings': '',
- 'libwave': '',
- 'libweakref': '',
- 'libwebbrowser': '',
- 'libwhichdb': '',
- 'libwinreg': '_winreg',
- 'libwinsound': '',
- 'libwsgiref': '',
- 'libxdrlib': '',
- 'libxmllib': '',
- 'libxmlrpclib': '',
- 'libzipfile': '',
- 'libzipimport': '',
- 'libzlib': '',
- 'tkinter': '',
- 'xmldomminidom': 'xml.dom.minidom',
- 'xmldompulldom': 'xml.dom.pulldom',
- 'xmldom': 'xml.dom',
- 'xmletree': 'xml.etree',
- 'xmlsaxhandler': 'xml.sax.handler',
- 'xmlsaxreader': 'xml.sax.reader',
- 'xmlsax': 'xml.sax',
- 'xmlsaxutils': 'xml.sax.utils',
- 'libal': '',
- 'libcd': '',
- 'libfl': '',
- 'libfm': '',
- 'libgl': '',
- 'libposixfile': '',
-
- # specials
- 'libundoc': '',
- 'libintro': '',
-
- 'libconsts': 'constants',
- 'libexcs': 'exceptions',
- 'libfuncs': 'functions',
- 'libobjs': 'objects',
- 'libstdtypes': 'stdtypes',
-
- # mainfiles
- 'lib': None,
- 'mimelib': None,
-
- # obsolete
- 'libni': None,
- 'libcmpcache': None,
- 'libcmp': None,
-
- # chapter overviews
- 'fileformats': '',
- 'filesys': '',
- 'frameworks': '',
- 'i18n': '',
- 'internet': '',
- 'ipc': '',
- 'language': '',
- 'archiving': '',
- 'custominterp': '',
- 'datatypes': '',
- 'development': '',
- 'markup': '',
- 'modules': '',
- 'netdata': '',
- 'numeric': '',
- 'persistence': '',
- 'windows': '',
- 'libsun': '',
- 'libmm': '',
- 'liballos': '',
- 'libcrypto': '',
- 'libsomeos': '',
- 'libsgi': '',
- 'libmisc': '',
- 'libpython': '',
- 'librestricted': '',
- 'libstrings': '',
- 'libunix': '',
- },
-
- 'ref': {
- '__newname__': 'reference',
- 'ref': None,
- 'ref1': 'introduction',
- 'ref2': 'lexical_analysis',
- 'ref3': 'datamodel',
- 'ref4': 'executionmodel',
- 'ref5': 'expressions',
- 'ref6': 'simple_stmts',
- 'ref7': 'compound_stmts',
- 'ref8': 'toplevel_components',
- },
-
- 'tut': {
- '__newname__': 'tutorial',
- '__labelprefix__': 'tut-',
- 'tut': 'tutorial:split',
- 'glossary': 'glossary',
- },
-
- 'api': {
- '__newname__': 'c-api',
- '__defaulthighlightlang__': 'c',
- 'api': None,
-
- 'abstract': '',
- 'concrete': '',
- 'exceptions': '',
- 'init': '',
- 'intro': '',
- 'memory': '',
- 'newtypes': '',
- 'refcounting': '',
- 'utilities': '',
- 'veryhigh': '',
- },
-
- 'ext': {
- '__newname__': 'extending',
- '__defaulthighlightlang__': 'c',
- 'ext': None,
-
- 'building': '',
- 'embedding': '',
- 'extending': 'extending',
- 'newtypes': '',
- 'windows': '',
- },
-
- 'dist': {
- '__newname__': 'distutils',
- 'dist': 'distutils:split',
- 'sysconfig': '',
- },
-
- 'mac': {
- '__newname__': 'maclib',
- 'mac': None,
-
- 'libaepack': 'aepack',
- 'libaetools': 'aetools',
- 'libaetypes': 'aetypes',
- 'libautogil': 'autogil',
- 'libcolorpicker': 'colorpicker',
- 'libframework': 'framework',
- 'libgensuitemodule': 'gensuitemodule',
- 'libmacic': 'macic',
- 'libmacos': 'macos',
- 'libmacostools': 'macostools',
- 'libmac': 'mac',
- 'libmacui': 'macui',
- 'libminiae': 'miniae',
- 'libscrap': 'scrap',
- 'scripting': '',
- 'toolbox': '',
- 'undoc': '',
- 'using': '',
-
- },
-
- 'inst': {
- '__newname__': 'install',
- '__defaulthighlightlang__': 'none',
- 'inst': 'index',
- },
-
- 'whatsnew': {
- '__newname__': 'whatsnew',
- 'whatsnew20': '2.0',
- 'whatsnew21': '2.1',
- 'whatsnew22': '2.2',
- 'whatsnew23': '2.3',
- 'whatsnew24': '2.4',
- 'whatsnew25': '2.5',
- 'whatsnew26': '2.6',
- 'whatsnew30': '3.0',
- },
-
- 'commontex': {
- '__newname__': '',
- 'boilerplate': None,
- 'patchlevel': None,
- 'copyright': '',
- 'license': '',
- 'reportingbugs': 'bugs',
- },
-}
-
-fn_mapping = {}
-
-for dir, files in _mapping.iteritems():
- newmap = fn_mapping[dir] = {}
- for fn in files:
- if not fn.startswith('_') and files[fn] == '':
- if fn.startswith(dir):
- newmap[fn] = fn[len(dir):]
- else:
- newmap[fn] = fn
- else:
- newmap[fn] = files[fn]
-
-
-# new directories to create
-dirs_to_make = [
- 'c-api',
- 'data',
- 'distutils',
- 'documenting',
- 'extending',
- 'includes',
- 'includes/sqlite3',
- 'install',
- 'maclib',
- 'library',
- 'reference',
- 'tutorial',
- 'whatsnew',
- 'tools',
-]
-
-# includefiles for \verbatiminput and \input
-includes_mapping = {
- '../../Parser/Python.asdl': None, # XXX
- '../../Lib/test/exception_hierarchy.txt': None,
- 'emailmessage': 'email.message.rst',
- 'emailparser': 'email.parser.rst',
- 'emailgenerator': 'email.generator.rst',
- 'emailmimebase': 'email.mime.rst',
- 'emailheaders': 'email.header.rst',
- 'emailcharsets': 'email.charset.rst',
- 'emailencoders': 'email.encoders.rst',
- 'emailexc': 'email.errors.rst',
- 'emailutil': 'email.util.rst',
- 'emailiter': 'email.iterators.rst',
-}
-
-# new files to copy from converter/newfiles
-newfiles_mapping = {
- 'conf.py': 'conf.py',
- 'TODO': 'TODO',
- 'ACKS': 'ACKS',
-
- 'ref_index.rst': 'reference/index.rst',
- 'tutorial_index.rst': 'tutorial/index.rst',
- 'modules_index.rst': 'library/index.rst',
- 'mac_index.rst': 'maclib/index.rst',
- 'ext_index.rst': 'extending/index.rst',
- 'api_index.rst': 'c-api/index.rst',
- 'dist_index.rst': 'distutils/index.rst',
- 'contents.rst': 'contents.rst',
- 'about.rst': 'about.rst',
-
- 'doc.rst': 'documenting/index.rst',
- 'doc_intro.rst': 'documenting/intro.rst',
- 'doc_style.rst': 'documenting/style.rst',
- 'doc_sphinx.rst': 'documenting/sphinx.rst',
- 'doc_rest.rst': 'documenting/rest.rst',
- 'doc_markup.rst': 'documenting/markup.rst',
-}
-
-# copy files from the old doc tree
-copyfiles_mapping = {
- 'api/refcounts.dat': 'data',
- 'lib/email-*.py': 'includes',
- 'lib/minidom-example.py': 'includes',
- 'lib/tzinfo-examples.py': 'includes',
- 'lib/sqlite3/*.py': 'includes/sqlite3',
- 'ext/*.c': 'includes',
- 'ext/*.py': 'includes',
- 'commontex/typestruct.h': 'includes',
-}
-
-# files to rename
-rename_mapping = {
- 'tutorial/1_tutorial.rst': None, # delete
- 'tutorial/2_tutorial.rst': 'tutorial/appetite.rst',
- 'tutorial/3_tutorial.rst': 'tutorial/interpreter.rst',
- 'tutorial/4_tutorial.rst': 'tutorial/introduction.rst',
- 'tutorial/5_tutorial.rst': 'tutorial/controlflow.rst',
- 'tutorial/6_tutorial.rst': 'tutorial/datastructures.rst',
- 'tutorial/7_tutorial.rst': 'tutorial/modules.rst',
- 'tutorial/8_tutorial.rst': 'tutorial/inputoutput.rst',
- 'tutorial/9_tutorial.rst': 'tutorial/errors.rst',
- 'tutorial/10_tutorial.rst': 'tutorial/classes.rst',
- 'tutorial/11_tutorial.rst': 'tutorial/stdlib.rst',
- 'tutorial/12_tutorial.rst': 'tutorial/stdlib2.rst',
- 'tutorial/13_tutorial.rst': 'tutorial/whatnow.rst',
- 'tutorial/14_tutorial.rst': 'tutorial/interactive.rst',
- 'tutorial/15_tutorial.rst': 'tutorial/floatingpoint.rst',
- 'tutorial/16_tutorial.rst': None, # delete
-
- 'distutils/1_distutils.rst': 'distutils/introduction.rst',
- 'distutils/2_distutils.rst': 'distutils/setupscript.rst',
- 'distutils/3_distutils.rst': 'distutils/configfile.rst',
- 'distutils/4_distutils.rst': 'distutils/sourcedist.rst',
- 'distutils/5_distutils.rst': 'distutils/builtdist.rst',
- 'distutils/6_distutils.rst': 'distutils/packageindex.rst',
- 'distutils/7_distutils.rst': 'distutils/uploading.rst',
- 'distutils/8_distutils.rst': 'distutils/examples.rst',
- 'distutils/9_distutils.rst': 'distutils/extending.rst',
- 'distutils/10_distutils.rst': 'distutils/commandref.rst',
- 'distutils/11_distutils.rst': 'distutils/apiref.rst',
-}
-
-# toctree entries
-toctree_mapping = {
- 'mac/scripting': ['gensuitemodule', 'aetools', 'aepack', 'aetypes', 'miniae'],
- 'mac/toolbox': ['colorpicker'],
- 'mac/undoc': [],
- 'lib/libstrings': ['string', 're', 'struct', 'difflib', 'stringio', 'textwrap',
- 'codecs', 'unicodedata', 'stringprep', 'fpformat'],
- 'lib/datatypes': ['datetime', 'calendar', 'collections', 'heapq', 'bisect',
- 'array', 'sets', 'sched', 'mutex', 'queue', 'weakref',
- 'userdict', 'types', 'new', 'copy', 'pprint', 'repr'],
- 'lib/numeric': ['math', 'cmath', 'decimal', 'random', 'itertools', 'functools',
- 'operator'],
- 'lib/netdata': ['email', 'mailcap', 'mailbox', 'mhlib', 'mimetools', 'mimetypes',
- 'mimewriter', 'mimify', 'multifile', 'rfc822',
- 'base64', 'binhex', 'binascii', 'quopri', 'uu'],
- 'lib/markup': ['htmlparser', 'sgmllib', 'htmllib', 'pyexpat', 'xml.dom',
- 'xml.dom.minidom', 'xml.dom.pulldom', 'xml.sax', 'xml.sax.handler',
- 'xml.sax.utils', 'xml.sax.reader', 'xml.etree.elementtree'],
- 'lib/fileformats': ['csv', 'configparser', 'robotparser', 'netrc', 'xdrlib'],
- 'lib/libcrypto': ['hashlib', 'hmac', 'md5', 'sha'],
- 'lib/filesys': ['os.path', 'fileinput', 'stat', 'statvfs', 'filecmp',
- 'tempfile', 'glob', 'fnmatch', 'linecache', 'shutil', 'dircache'],
- 'lib/archiving': ['zlib', 'gzip', 'bz2', 'zipfile', 'tarfile'],
- 'lib/persistence': ['pickle', 'copy_reg', 'shelve', 'marshal', 'anydbm',
- 'whichdb', 'dbm', 'gdbm', 'dbhash', 'bsddb', 'dumbdbm',
- 'sqlite3'],
- 'lib/liballos': ['os', 'time', 'optparse', 'getopt', 'logging', 'getpass',
- 'curses', 'curses.ascii', 'curses.panel', 'platform',
- 'errno', 'ctypes'],
- 'lib/libsomeos': ['select', 'thread', 'threading', 'dummy_thread', 'dummy_threading',
- 'mmap', 'readline', 'rlcompleter'],
- 'lib/libunix': ['posix', 'pwd', 'spwd', 'grp', 'crypt', 'dl', 'termios', 'tty',
- 'pty', 'fcntl', 'pipes', 'posixfile', 'resource', 'nis',
- 'syslog', 'commands'],
- 'lib/ipc': ['subprocess', 'socket', 'signal', 'popen2', 'asyncore', 'asynchat'],
- 'lib/internet': ['webbrowser', 'cgi', 'cgitb', 'wsgiref', 'urllib', 'urllib2',
- 'httplib', 'ftplib', 'poplib', 'imaplib',
- 'nntplib', 'smtplib', 'smtpd', 'telnetlib', 'uuid', 'urlparse',
- 'socketserver', 'basehttpserver', 'simplehttpserver',
- 'cgihttpserver', 'cookielib', 'cookie', 'xmlrpclib',
- 'simplexmlrpcserver', 'docxmlrpcserver'],
- 'lib/libmm': ['audioop', 'imageop', 'aifc', 'sunau', 'wave', 'chunk',
- 'colorsys', 'imghdr', 'sndhdr', 'ossaudiodev'],
- 'lib/i18n': ['gettext', 'locale'],
- 'lib/frameworks': ['cmd', 'shlex'],
- 'lib/development': ['pydoc', 'doctest', 'unittest', 'test'],
- 'lib/libpython': ['sys', '__builtin__', '__main__', 'warnings', 'contextlib',
- 'atexit', 'traceback', '__future__', 'gc', 'inspect',
- 'site', 'user', 'fpectl'],
- 'lib/custominterp': ['code', 'codeop'],
- 'lib/librestricted': ['rexec', 'bastion'],
- 'lib/modules': ['imp', 'zipimport', 'pkgutil', 'modulefinder', 'runpy'],
- 'lib/language': ['parser', 'symbol', 'token', 'keyword', 'tokenize',
- 'tabnanny', 'pyclbr', 'py_compile', 'compileall', 'dis',
- 'pickletools', 'distutils'],
- 'lib/compiler': ['ast'],
- 'lib/libmisc': ['formatter'],
- 'lib/libsgi': ['al', 'cd', 'fl', 'fm', 'gl', 'imgfile', 'jpeg'],
- 'lib/libsun': ['sunaudio'],
- 'lib/windows': ['msilib', 'msvcrt', '_winreg', 'winsound'],
- 'lib/tkinter': [],
-}
-
-# map sourcefilename to [pre, post]
-amendments_mapping = {
- 'license.rst': ['''\
-.. highlightlang:: none
-
-*******************
-History and License
-*******************
-
-''', ''],
-
- 'bugs.rst': ['''\
-**************
-Reporting Bugs
-**************
-
-''', ''],
-
- 'copyright.rst': ['''\
-*********
-Copyright
-*********
-
-''', ''],
-
- 'install/index.rst': ['''\
-.. _install-index:
-
-''', ''],
-}
diff --git a/converter/latexparser.py b/converter/latexparser.py
deleted file mode 100644
index bceffd2d..00000000
--- a/converter/latexparser.py
+++ /dev/null
@@ -1,697 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
- Python documentation LaTeX file parser
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- For more documentation, look into the ``restwriter.py`` file.
-
- :copyright: 2007-2008 by Georg Brandl.
- :license: BSD.
-"""
-
-from .docnodes import CommentNode, RootNode, NodeList, ParaSepNode, \
- TextNode, EmptyNode, NbspNode, SimpleCmdNode, BreakNode, CommandNode, \
- DescLineCommandNode, InlineNode, IndexNode, SectioningNode, \
- EnvironmentNode, DescEnvironmentNode, TableNode, VerbatimNode, \
- ListNode, ItemizeNode, EnumerateNode, DescriptionNode, \
- DefinitionsNode, ProductionListNode
-
-from .util import umlaut, empty
-
-
-class ParserError(Exception):
- def __init__(self, msg, lineno):
- Exception.__init__(self, msg, lineno)
-
- def __str__(self):
- return '%s, line %s' % self.args
-
-
-def generic_command(name, argspec, nodetype=CommandNode):
- def handle(self):
- args = self.parse_args('\\'+name, argspec)
- return nodetype(name, args)
- return handle
-
-def sectioning_command(name):
- """ Special handling for sectioning commands: move labels directly following
- a sectioning command before it, as required by reST. """
- def handle(self):
- args = self.parse_args('\\'+name, 'M')
- snode = SectioningNode(name, args)
- for l, t, v, r in self.tokens:
- if t == 'command' and v == 'label':
- largs = self.parse_args('\\label', 'T')
- snode.args[0] = NodeList([snode.args[0], CommandNode('label', largs)])
- break
- if t == 'text':
- if not v.strip():
- # discard whitespace; after a section that's no problem
- continue
- self.tokens.push((l, t, v, r))
- break
- # no label followed
- return snode
- return handle
-
-def generic_environment(name, argspec, nodetype=EnvironmentNode):
- def handle(self):
- args = self.parse_args(name, argspec)
- return nodetype(name, args, self.parse_until(self.environment_end))
- return handle
-
-
-class DocParserMeta(type):
- def __init__(cls, name, bases, dict):
- for nodetype, commands in cls.generic_commands.iteritems():
- for cmdname, argspec in commands.iteritems():
- setattr(cls, 'handle_' + cmdname,
- generic_command(cmdname, argspec, nodetype))
-
- for cmdname in cls.sectioning_commands:
- setattr(cls, 'handle_' + cmdname, sectioning_command(cmdname))
-
- for nodetype, envs in cls.generic_envs.iteritems():
- for envname, argspec in envs.iteritems():
- setattr(cls, 'handle_%s_env' % envname,
- generic_environment(envname, argspec, nodetype))
-
-
-class DocParser(object):
- """ Parse a Python documentation LaTeX file. """
- __metaclass__ = DocParserMeta
-
- def __init__(self, tokenstream, filename):
- self.tokens = tokenstream
- self.filename = filename
-
- def parse(self):
- self.rootnode = RootNode(self.filename, None)
- self.rootnode.children = self.parse_until(None)
- self.rootnode.transform()
- return self.rootnode
-
- def parse_until(self, condition=None, endatbrace=False):
- nodelist = NodeList()
- bracelevel = 0
- for l, t, v, r in self.tokens:
- if condition and condition(t, v, bracelevel):
- return nodelist.flatten()
- if t == 'command':
- if len(v) == 1 and not v.isalpha():
- nodelist.append(self.handle_special_command(v))
- continue
- handler = getattr(self, 'handle_' + v, None)
- if not handler:
- raise ParserError('no handler for \\%s command' % v, l)
- nodelist.append(handler())
- elif t == 'bgroup':
- bracelevel += 1
- elif t == 'egroup':
- if bracelevel == 0 and endatbrace:
- return nodelist.flatten()
- bracelevel -= 1
- elif t == 'comment':
- nodelist.append(CommentNode(v))
- elif t == 'tilde':
- nodelist.append(NbspNode())
- elif t == 'mathmode':
- pass # ignore math mode
- elif t == 'parasep':
- nodelist.append(ParaSepNode())
- else:
- # includes 'boptional' and 'eoptional' which don't have a
- # special meaning in text
- nodelist.append(TextNode(v))
- return nodelist.flatten()
-
- def parse_args(self, cmdname, argspec):
- """ Helper to parse arguments of a command. """
- # argspec: M = mandatory, T = mandatory, check text-only,
- # O = optional, Q = optional, check text-only
- args = []
- def optional_end(type, value, bracelevel):
- return type == 'eoptional' and bracelevel == 0
-
- for i, c in enumerate(argspec):
- assert c in 'OMTQ'
- nextl, nextt, nextv, nextr = self.tokens.pop()
- while nextt == 'comment' or (nextt == 'text' and nextv.isspace()):
- nextl, nextt, nextv, nextr = self.tokens.pop()
-
- if c in 'OQ':
- if nextt == 'boptional':
- arg = self.parse_until(optional_end)
- if c == 'Q' and not isinstance(arg, TextNode):
- raise ParserError('%s: argument %d must be text only' %
- (cmdname, i), nextl)
- args.append(arg)
- else:
- # not given
- args.append(EmptyNode())
- self.tokens.push((nextl, nextt, nextv, nextr))
- continue
-
- if nextt == 'bgroup':
- arg = self.parse_until(None, endatbrace=True)
- if c == 'T' and not isinstance(arg, TextNode):
- raise ParserError('%s: argument %d must be text only' %
- (cmdname, i), nextl)
- args.append(arg)
- else:
- if nextt != 'text':
- raise ParserError('%s: non-grouped non-text arguments not '
- 'supported' % cmdname, nextl)
- args.append(TextNode(nextv[0]))
- self.tokens.push((nextl, nextt, nextv[1:], nextr[1:]))
- return args
-
- sectioning_commands = [
- 'chapter',
- 'chapter*',
- 'section',
- 'subsection',
- 'subsubsection',
- 'paragraph',
- ]
-
- generic_commands = {
- CommandNode: {
- 'label': 'T',
-
- 'localmoduletable': '',
- 'verbatiminput': 'T',
- 'input': 'T',
- 'centerline': 'M',
-
- # Pydoc specific commands
- 'versionadded': 'OT',
- 'versionchanged': 'OT',
- 'deprecated': 'TM',
- 'XX' 'X': 'M', # used in dist.tex ;)
-
- # module-specific
- 'declaremodule': 'QTT',
- 'platform': 'T',
- 'modulesynopsis': 'M',
- 'moduleauthor': 'TT',
- 'sectionauthor': 'TT',
-
- # reference lists
- 'seelink': 'TMM',
- 'seemodule': 'QTM',
- 'seepep': 'TMM',
- 'seerfc': 'TTM',
- 'seetext': 'M',
- 'seetitle': 'OMM',
- 'seeurl': 'MM',
- },
-
- DescLineCommandNode: {
- # additional items for ...desc
- 'funcline': 'TM',
- 'funclineni': 'TM',
- 'methodline': 'QTM',
- 'methodlineni': 'QTM',
- 'memberline': 'QT',
- 'memberlineni': 'QT',
- 'dataline': 'T',
- 'datalineni': 'T',
- 'cfuncline': 'MTM',
- 'cmemberline': 'TTT',
- 'csimplemacroline': 'T',
- 'ctypeline': 'QT',
- 'cvarline': 'TT',
- },
-
- InlineNode: {
- # specials
- 'footnote': 'M',
- 'frac': 'TT',
- 'refmodule': 'QT',
- 'citetitle': 'QT',
- 'ulink': 'MT',
- 'url': 'M',
-
- # mapped to normal
- 'textrm': 'M',
- 'b': 'M',
- 'email': 'M', # email addresses are recognized by ReST
-
- # mapped to **strong**
- 'textbf': 'M',
- 'strong': 'M',
-
- # mapped to *emphasized*
- 'textit': 'M',
- 'emph': 'M',
-
- # mapped to ``code``
- 'bfcode': 'M',
- 'code': 'M',
- 'samp': 'M',
- 'character': 'M',
- 'texttt': 'M',
-
- # mapped to `default role`
- 'var': 'M',
-
- # mapped to [brackets]
- 'optional': 'M',
-
- # mapped to :role:`text`
- 'cdata': 'M',
- 'cfunction': 'M', # -> :cfunc:
- 'class': 'M',
- 'command': 'M',
- 'constant': 'M', # -> :const:
- 'csimplemacro': 'M', # -> :cmacro:
- 'ctype': 'M',
- 'data': 'M', # NEW
- 'dfn': 'M',
- 'envvar': 'M',
- 'exception': 'M', # -> :exc:
- 'file': 'M',
- 'filenq': 'M',
- 'filevar': 'M',
- 'function': 'M', # -> :func:
- 'grammartoken': 'M', # -> :token:
- 'guilabel': 'M',
- 'kbd': 'M',
- 'keyword': 'M',
- 'mailheader': 'M',
- 'makevar': 'M',
- 'manpage': 'MM',
- 'member': 'M',
- 'menuselection': 'M',
- 'method': 'M', # -> :meth:
- 'mimetype': 'M',
- 'module': 'M', # -> :mod:
- 'newsgroup': 'M',
- 'option': 'M',
- 'pep': 'M',
- 'program': 'M',
- 'programopt': 'M', # -> :option:
- 'longprogramopt': 'M', # -> :option:
- 'ref': 'T',
- 'regexp': 'M',
- 'rfc': 'M',
- 'token': 'M',
-
- 'NULL': '',
- # these are defined via substitutions
- 'shortversion': '',
- 'version': '',
- 'today': '',
- },
-
- SimpleCmdNode: {
- # these are directly mapped to text
- 'AA': '', # A as in Angstrom
- 'ASCII': '',
- 'C': '',
- 'Cpp': '',
- 'EOF': '',
- 'LaTeX': '',
- 'POSIX': '',
- 'UNIX': '',
- 'Unix': '',
- 'backslash': '',
- 'copyright': '',
- 'e': '', # backslash
- 'geq': '',
- 'infinity': '',
- 'ldots': '',
- 'leq': '',
- 'moreargs': '',
- 'pi': '',
- 'plusminus': '',
- 'sub': '', # menu separator
- 'textbackslash': '',
- 'textunderscore': '',
- 'texteuro': '',
- 'textasciicircum': '',
- 'textasciitilde': '',
- 'textgreater': '',
- 'textless': '',
- 'textbar': '',
- 'tilde': '',
- 'unspecified': '',
- },
-
- IndexNode: {
- 'bifuncindex': 'T',
- 'exindex': 'T',
- 'kwindex': 'T',
- 'obindex': 'T',
- 'opindex': 'T',
- 'refmodindex': 'T',
- 'refexmodindex': 'T',
- 'refbimodindex': 'T',
- 'refstmodindex': 'T',
- 'stindex': 'T',
- 'index': 'M',
- 'indexii': 'TT',
- 'indexiii': 'TTT',
- 'indexiv': 'TTTT',
- 'ttindex': 'T',
- 'withsubitem': 'TM',
- },
-
- # These can be safely ignored
- EmptyNode: {
- 'setindexsubitem': 'T',
- 'tableofcontents': '',
- 'makeindex': '',
- 'makemodindex': '',
- 'maketitle': '',
- 'appendix': '',
- 'documentclass': 'OM',
- 'usepackage': 'OM',
- 'noindent': '',
- 'protect': '',
- 'ifhtml': '',
- 'fi': '',
- },
- }
-
- generic_envs = {
- EnvironmentNode: {
- # generic LaTeX environments
- 'abstract': '',
- 'quote': '',
- 'quotation': '',
-
- 'notice': 'Q',
- 'seealso': '',
- 'seealso*': '',
- },
-
- DescEnvironmentNode: {
- # information units
- 'datadesc': 'T',
- 'datadescni': 'T',
- 'excclassdesc': 'TM',
- 'excdesc': 'T',
- 'funcdesc': 'TM',
- 'funcdescni': 'TM',
- 'classdesc': 'TM',
- 'classdesc*': 'T',
- 'memberdesc': 'QT',
- 'memberdescni': 'QT',
- 'methoddesc': 'QMM',
- 'methoddescni': 'QMM',
- 'opcodedesc': 'TT',
-
- 'cfuncdesc': 'MTM',
- 'cmemberdesc': 'TTT',
- 'csimplemacrodesc': 'T',
- 'ctypedesc': 'QT',
- 'cvardesc': 'TT',
- },
- }
-
- # ------------------------- special handlers -----------------------------
-
- def handle_special_command(self, cmdname):
- if cmdname in '{}%$^#&_ ':
- # these are just escapes for special LaTeX commands
- return TextNode(cmdname)
- elif cmdname in '\'`~"c':
- # accents and umlauts
- nextl, nextt, nextv, nextr = self.tokens.next()
- if nextt == 'bgroup':
- _, nextt, _, _ = self.tokens.next()
- if nextt != 'egroup':
- raise ParserError('wrong argtype for \\%s' % cmdname, nextl)
- return TextNode(cmdname)
- if nextt != 'text':
- # not nice, but {\~} = ~
- self.tokens.push((nextl, nextt, nextv, nextr))
- return TextNode(cmdname)
- c = umlaut(cmdname, nextv[0])
- self.tokens.push((nextl, nextt, nextv[1:], nextr[1:]))
- return TextNode(c)
- elif cmdname == '\\':
- return BreakNode()
- raise ParserError('no handler for \\%s command' % cmdname,
- self.tokens.peek()[0])
-
- def handle_begin(self):
- envname, = self.parse_args('begin', 'T')
- handler = getattr(self, 'handle_%s_env' % envname.text, None)
- if not handler:
- raise ParserError('no handler for %s environment' % envname.text,
- self.tokens.peek()[0])
- return handler()
-
- # ------------------------- command handlers -----------------------------
-
- def mk_metadata_handler(self, name, mdname=None):
- if mdname is None:
- mdname = name
- def handler(self):
- data, = self.parse_args('\\'+name, 'M')
- self.rootnode.params[mdname] = data
- return EmptyNode()
- return handler
-
- handle_title = mk_metadata_handler(None, 'title')
- handle_author = mk_metadata_handler(None, 'author')
- handle_authoraddress = mk_metadata_handler(None, 'authoraddress')
- handle_date = mk_metadata_handler(None, 'date')
- handle_release = mk_metadata_handler(None, 'release')
- handle_setshortversion = mk_metadata_handler(None, 'setshortversion',
- 'shortversion')
- handle_setreleaseinfo = mk_metadata_handler(None, 'setreleaseinfo',
- 'releaseinfo')
-
- def handle_note(self):
- note = self.parse_args('\\note', 'M')[0]
- return EnvironmentNode('notice', [TextNode('note')], note)
-
- def handle_warning(self):
- warning = self.parse_args('\\warning', 'M')[0]
- return EnvironmentNode('notice', [TextNode('warning')], warning)
-
- def handle_ifx(self):
- for l, t, v, r in self.tokens:
- if t == 'command' and v == 'fi':
- break
- return EmptyNode()
-
- def handle_c(self):
- return self.handle_special_command('c')
-
- def handle_mbox(self):
- return self.parse_args('\\mbox', 'M')[0]
-
- def handle_leftline(self):
- return self.parse_args('\\leftline', 'M')[0]
-
- def handle_Large(self):
- return self.parse_args('\\Large', 'M')[0]
-
- def handle_pytype(self):
- # \pytype{x} is synonymous to \class{x} now
- return self.handle_class()
-
- def handle_nodename(self):
- return self.handle_label()
-
- def handle_verb(self):
- # skip delimiter
- l, t, v, r = self.tokens.next()
- l, t, v, r = self.tokens.next()
- assert t == 'text'
- node = InlineNode('code', [TextNode(r)])
- # skip delimiter
- l, t, v, r = self.tokens.next()
- return node
-
- def handle_locallinewidth(self):
- return EmptyNode()
-
- def handle_linewidth(self):
- return EmptyNode()
-
- def handle_setlength(self):
- self.parse_args('\\setlength', 'MM')
- return EmptyNode()
-
- def handle_stmodindex(self):
- arg, = self.parse_args('\\stmodindex', 'T')
- return CommandNode('declaremodule', [EmptyNode(),
- TextNode(u'standard'),
- arg])
-
- def handle_indexname(self):
- return EmptyNode()
-
- def handle_renewcommand(self):
- self.parse_args('\\renewcommand', 'MM')
- return EmptyNode()
-
- # ------------------------- environment handlers -------------------------
-
- def handle_document_env(self):
- return self.parse_until(self.environment_end)
-
- handle_sloppypar_env = handle_document_env
- handle_flushleft_env = handle_document_env
- handle_math_env = handle_document_env
-
- def handle_verbatim_env(self):
- text = []
- for l, t, v, r in self.tokens:
- if t == 'command' and v == 'end' :
- tok = self.tokens.peekmany(3)
- if tok[0][1] == 'bgroup' and \
- tok[1][1] == 'text' and \
- tok[1][2] == 'verbatim' and \
- tok[2][1] == 'egroup':
- self.tokens.popmany(3)
- break
- text.append(r)
- return VerbatimNode(TextNode(''.join(text)))
-
- # involved math markup must be corrected manually
- def handle_displaymath_env(self):
- text = ['XXX: translate this math']
- for l, t, v, r in self.tokens:
- if t == 'command' and v == 'end' :
- tok = self.tokens.peekmany(3)
- if tok[0][1] == 'bgroup' and \
- tok[1][1] == 'text' and \
- tok[1][2] == 'displaymath' and \
- tok[2][1] == 'egroup':
- self.tokens.popmany(3)
- break
- text.append(r)
- return VerbatimNode(TextNode(''.join(text)))
-
- # alltt is different from verbatim because it allows markup
- def handle_alltt_env(self):
- nodelist = NodeList()
- for l, t, v, r in self.tokens:
- if self.environment_end(t, v):
- break
- if t == 'command':
- if len(v) == 1 and not v.isalpha():
- nodelist.append(self.handle_special_command(v))
- continue
- handler = getattr(self, 'handle_' + v, None)
- if not handler:
- raise ParserError('no handler for \\%s command' % v, l)
- nodelist.append(handler())
- elif t == 'comment':
- nodelist.append(CommentNode(v))
- else:
- # all else is appended raw
- nodelist.append(TextNode(r))
- return VerbatimNode(nodelist.flatten())
-
- def handle_itemize_env(self, nodetype=ItemizeNode):
- items = []
- # a usecase for nonlocal :)
- running = [False]
-
- def item_condition(t, v, bracelevel):
- if self.environment_end(t, v):
- del running[:]
- return True
- if t == 'command' and v == 'item':
- return True
- return False
-
- # the text until the first \item is discarded
- self.parse_until(item_condition)
- while running:
- itemname, = self.parse_args('\\item', 'O')
- itemcontent = self.parse_until(item_condition)
- items.append([itemname, itemcontent])
- return nodetype(items)
-
- def handle_enumerate_env(self):
- return self.handle_itemize_env(EnumerateNode)
-
- def handle_description_env(self):
- return self.handle_itemize_env(DescriptionNode)
-
- def handle_definitions_env(self):
- items = []
- running = [False]
-
- def item_condition(t, v, bracelevel):
- if self.environment_end(t, v):
- del running[:]
- return True
- if t == 'command' and v == 'term':
- return True
- return False
-
- # the text until the first \item is discarded
- self.parse_until(item_condition)
- while running:
- itemname, = self.parse_args('\\term', 'M')
- itemcontent = self.parse_until(item_condition)
- items.append([itemname, itemcontent])
- return DefinitionsNode(items)
-
- def mk_table_handler(self, envname, numcols):
- def handle_table(self):
- args = self.parse_args('table'+envname, 'TT' + 'M'*numcols)
- firstcolformat = args[1].text
- headings = args[2:]
- lines = []
- for l, t, v, r in self.tokens:
- # XXX: everything outside of \linexxx is lost here
- if t == 'command':
- if v == 'line'+envname:
- lines.append(self.parse_args('\\line'+envname,
- 'M'*numcols))
- elif v == 'end':
- arg = self.parse_args('\\end', 'T')
- assert arg[0].text.endswith('table'+envname), arg[0].text
- break
- for line in lines:
- if not empty(line[0]):
- line[0] = InlineNode(firstcolformat, [line[0]])
- return TableNode(numcols, headings, lines)
- return handle_table
-
- handle_tableii_env = mk_table_handler(None, 'ii', 2)
- handle_longtableii_env = handle_tableii_env
- handle_tableiii_env = mk_table_handler(None, 'iii', 3)
- handle_longtableiii_env = handle_tableiii_env
- handle_tableiv_env = mk_table_handler(None, 'iv', 4)
- handle_longtableiv_env = handle_tableiv_env
- handle_tablev_env = mk_table_handler(None, 'v', 5)
- handle_longtablev_env = handle_tablev_env
-
- def handle_productionlist_env(self):
- env_args = self.parse_args('productionlist', 'Q')
- items = []
- for l, t, v, r in self.tokens:
- # XXX: everything outside of \production is lost here
- if t == 'command':
- if v == 'production':
- items.append(self.parse_args('\\production', 'TM'))
- elif v == 'productioncont':
- args = self.parse_args('\\productioncont', 'M')
- args.insert(0, EmptyNode())
- items.append(args)
- elif v == 'end':
- arg = self.parse_args('\\end', 'T')
- assert arg[0].text == 'productionlist'
- break
- node = ProductionListNode(items)
- # the argument specifies a production group
- node.arg = env_args[0]
- return node
-
- def environment_end(self, t, v, bracelevel=0):
- if t == 'command' and v == 'end':
- self.parse_args('\\end', 'T')
- return True
- return False
diff --git a/converter/newfiles/ACKS b/converter/newfiles/ACKS
deleted file mode 100644
index 1e10a219..00000000
--- a/converter/newfiles/ACKS
+++ /dev/null
@@ -1,197 +0,0 @@
-Contributors to the Python Documentation
-----------------------------------------
-
-This file lists people who have contributed in some way to the Python
-documentation. It is probably not complete -- if you feel that you or
-anyone else should be on this list, please let us know (send email to
-docs@python.org), and we'll be glad to correct the problem.
-
-It is only with the input and contributions of the Python community
-that Python has such wonderful documentation -- Thank You!
-
-
-* Aahz
-* Michael Abbott
-* Steve Alexander
-* Jim Ahlstrom
-* Fred Allen
-* A. Amoroso
-* Pehr Anderson
-* Oliver Andrich
-* Jesús Cea Avión
-* Daniel Barclay
-* Chris Barker
-* Don Bashford
-* Anthony Baxter
-* Bennett Benson
-* Jonathan Black
-* Robin Boerdijk
-* Michal Bozon
-* Aaron Brancotti
-* Keith Briggs
-* Lee Busby
-* Lorenzo M. Catucci
-* Mauro Cicognini
-* Gilles Civario
-* Mike Clarkson
-* Steve Clift
-* Dave Cole
-* Matthew Cowles
-* Jeremy Craven
-* Andrew Dalke
-* Ben Darnell
-* L. Peter Deutsch
-* Robert Donohue
-* Fred L. Drake, Jr.
-* Jeff Epler
-* Michael Ernst
-* Blame Andy Eskilsson
-* Carey Evans
-* Martijn Faassen
-* Carl Feynman
-* Hernán Martínez Foffani
-* Stefan Franke
-* Jim Fulton
-* Peter Funk
-* Lele Gaifax
-* Matthew Gallagher
-* Ben Gertzfield
-* Nadim Ghaznavi
-* Jonathan Giddy
-* Shelley Gooch
-* Nathaniel Gray
-* Grant Griffin
-* Thomas Guettler
-* Anders Hammarquist
-* Mark Hammond
-* Harald Hanche-Olsen
-* Manus Hand
-* Gerhard Häring
-* Travis B. Hartwell
-* Janko Hauser
-* Bernhard Herzog
-* Magnus L. Hetland
-* Konrad Hinsen
-* Stefan Hoffmeister
-* Albert Hofkamp
-* Gregor Hoffleit
-* Steve Holden
-* Thomas Holenstein
-* Gerrit Holl
-* Rob Hooft
-* Brian Hooper
-* Randall Hopper
-* Michael Hudson
-* Eric Huss
-* Jeremy Hylton
-* Roger Irwin
-* Jack Jansen
-* Philip H. Jensen
-* Pedro Diaz Jimenez
-* Kent Johnson
-* Lucas de Jonge
-* Andreas Jung
-* Robert Kern
-* Jim Kerr
-* Jan Kim
-* Greg Kochanski
-* Guido Kollerie
-* Peter A. Koren
-* Daniel Kozan
-* Andrew M. Kuchling
-* Dave Kuhlman
-* Erno Kuusela
-* Detlef Lannert
-* Piers Lauder
-* Glyph Lefkowitz
-* Marc-André Lemburg
-* Ulf A. Lindgren
-* Everett Lipman
-* Mirko Liss
-* Martin von Löwis
-* Fredrik Lundh
-* Jeff MacDonald
-* John Machin
-* Andrew MacIntyre
-* Vladimir Marangozov
-* Vincent Marchetti
-* Laura Matson
-* Daniel May
-* Doug Mennella
-* Paolo Milani
-* Skip Montanaro
-* Paul Moore
-* Ross Moore
-* Sjoerd Mullender
-* Dale Nagata
-* Ng Pheng Siong
-* Koray Oner
-* Tomas Oppelstrup
-* Denis S. Otkidach
-* Zooko O'Whielacronx
-* William Park
-* Joonas Paalasmaa
-* Harri Pasanen
-* Bo Peng
-* Tim Peters
-* Christopher Petrilli
-* Justin D. Pettit
-* Chris Phoenix
-* François Pinard
-* Paul Prescod
-* Eric S. Raymond
-* Edward K. Ream
-* Sean Reifschneider
-* Bernhard Reiter
-* Armin Rigo
-* Wes Rishel
-* Jim Roskind
-* Guido van Rossum
-* Donald Wallace Rouse II
-* Nick Russo
-* Chris Ryland
-* Constantina S.
-* Hugh Sasse
-* Bob Savage
-* Scott Schram
-* Neil Schemenauer
-* Barry Scott
-* Joakim Sernbrant
-* Justin Sheehy
-* Michael Simcich
-* Ionel Simionescu
-* Gregory P. Smith
-* Roy Smith
-* Clay Spence
-* Nicholas Spies
-* Tage Stabell-Kulo
-* Frank Stajano
-* Anthony Starks
-* Greg Stein
-* Peter Stoehr
-* Mark Summerfield
-* Reuben Sumner
-* Kalle Svensson
-* Jim Tittsler
-* Ville Vainio
-* Martijn Vries
-* Charles G. Waldman
-* Greg Ward
-* Barry Warsaw
-* Corran Webster
-* Glyn Webster
-* Bob Weiner
-* Eddy Welbourne
-* Mats Wichmann
-* Gerry Wiener
-* Timothy Wild
-* Collin Winter
-* Blake Winton
-* Dan Wolfe
-* Steven Work
-* Thomas Wouters
-* Ka-Ping Yee
-* Rory Yorke
-* Moshe Zadka
-* Milan Zamazal
-* Cheng Zhang
diff --git a/converter/newfiles/TODO b/converter/newfiles/TODO
deleted file mode 100644
index 73b3ab2a..00000000
--- a/converter/newfiles/TODO
+++ /dev/null
@@ -1,18 +0,0 @@
-To do after conversion
-======================
-
-* fix all references and links marked with `XXX`
-* adjust all literal include paths
-* remove all non-literal includes
-* fix all duplicate labels and undefined label references
-* fix the email package docs: add a toctree
-* split very large files and add toctrees
-* integrate standalone HOWTOs
-* find out which files get "comments disabled" metadata
-* double backslashes in production lists
-* add synopses for each module
-* write "About these documents"
-* finish "Documenting Python"
-* extend copyright.rst
-* fix the "quadruple" index term
-* fix :file: and |version| in install \ No newline at end of file
diff --git a/converter/newfiles/about.rst b/converter/newfiles/about.rst
deleted file mode 100644
index f828e46a..00000000
--- a/converter/newfiles/about.rst
+++ /dev/null
@@ -1,18 +0,0 @@
-=====================
-About these documents
-=====================
-
-These documents are generated from `reStructuredText
-<http://docutils.sf.net/rst.html>`_ sources by *Sphinx*, a document processor
-specifically written for the Python documentation.
-
-In the online version of these documents, you can submit comments and suggest
-changes directly on the documentation pages.
-
-Development of the documentation and its toolchain takes place on the
-docs@python.org mailing list. We're always looking for volunteers wanting
-to help with the docs, so feel free to send a mail there!
-
-See :ref:`reporting-bugs` for information how to report bugs in Python itself.
-
-.. include:: ACKS \ No newline at end of file
diff --git a/converter/newfiles/api_index.rst b/converter/newfiles/api_index.rst
deleted file mode 100644
index c6433125..00000000
--- a/converter/newfiles/api_index.rst
+++ /dev/null
@@ -1,33 +0,0 @@
-.. _c-api-index:
-
-##################################
- Python/C API Reference Manual
-##################################
-
-:Release: |version|
-:Date: |today|
-
-This manual documents the API used by C and C++ programmers who want to write
-extension modules or embed Python. It is a companion to :ref:`extending-index`,
-which describes the general principles of extension writing but does not
-document the API functions in detail.
-
-.. warning::
-
- The current version of this document is somewhat incomplete. However, most of
- the important functions, types and structures are described.
-
-
-.. toctree::
- :maxdepth: 2
-
- intro.rst
- veryhigh.rst
- refcounting.rst
- exceptions.rst
- utilities.rst
- abstract.rst
- concrete.rst
- init.rst
- memory.rst
- newtypes.rst
diff --git a/converter/newfiles/conf.py b/converter/newfiles/conf.py
deleted file mode 100644
index b54a53e0..00000000
--- a/converter/newfiles/conf.py
+++ /dev/null
@@ -1,47 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Python documentation build configuration file
-#
-# The contents of this file are pickled, so don't put values in the namespace
-# that aren't pickleable (module imports are okay, they're removed automatically).
-#
-
-# The default replacements for |version| and |release|.
-# If 'auto', Sphinx looks for the Include/patchlevel.h file in the current Python
-# source tree and replaces the values accordingly.
-#
-# The short X.Y version.
-# version = '2.6'
-version = 'auto'
-# The full version, including alpha/beta/rc tags.
-# release = '2.6a0'
-release = 'auto'
-
-# There are two options for replacing |today|: either, you set today to some
-# non-false value, then it is used:
-today = ''
-# Else, today_fmt is used as the format for a strftime call.
-today_fmt = '%B %d, %Y'
-
-# List of files that shouldn't be included in the build.
-unused_files = [
- 'whatsnew/2.0.rst',
- 'whatsnew/2.1.rst',
- 'whatsnew/2.2.rst',
- 'whatsnew/2.3.rst',
- 'whatsnew/2.4.rst',
- 'whatsnew/2.5.rst',
- 'maclib/scrap.rst',
- 'library/xmllib.rst',
-]
-
-# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
-# using the given strftime format.
-last_updated_format = '%b %d, %Y'
-
-# If true, SmartyPants will be used to convert quotes and dashes to
-# typographically correct entities.
-use_smartypants = True
-
-# If true, '()' will be appended to :func: etc. cross-reference text.
-add_function_parentheses = True
diff --git a/converter/newfiles/contents.rst b/converter/newfiles/contents.rst
deleted file mode 100644
index aebe1ab9..00000000
--- a/converter/newfiles/contents.rst
+++ /dev/null
@@ -1,21 +0,0 @@
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- Python Documentation contents
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-.. toctree::
-
- whatsnew/2.6.rst
- tutorial/index.rst
- reference/index.rst
- library/index.rst
- maclib/index.rst
- extending/index.rst
- c-api/index.rst
- distutils/index.rst
- install/index.rst
- documenting/index.rst
-
- bugs.rst
- about.rst
- license.rst
- copyright.rst
diff --git a/converter/newfiles/dist_index.rst b/converter/newfiles/dist_index.rst
deleted file mode 100644
index 34eef86d..00000000
--- a/converter/newfiles/dist_index.rst
+++ /dev/null
@@ -1,28 +0,0 @@
-.. _distutils-index:
-
-###############################
- Distributing Python Modules
-###############################
-
-:Release: |version|
-:Date: |today|
-
-This document describes the Python Distribution Utilities ("Distutils") from
-the module developer's point of view, describing how to use the Distutils to
-make Python modules and extensions easily available to a wider audience with
-very little overhead for build/release/install mechanics.
-
-.. toctree::
- :maxdepth: 2
-
- introduction.rst
- setupscript.rst
- configfile.rst
- sourcedist.rst
- builtdist.rst
- packageindex.rst
- uploading.rst
- examples.rst
- extending.rst
- commandref.rst
- apiref.rst
diff --git a/converter/newfiles/doc.rst b/converter/newfiles/doc.rst
deleted file mode 100644
index 1a3778b0..00000000
--- a/converter/newfiles/doc.rst
+++ /dev/null
@@ -1,33 +0,0 @@
-.. _documenting-index:
-
-######################
- Documenting Python
-######################
-
-
-The Python language has a substantial body of documentation, much of it
-contributed by various authors. The markup used for the Python documentation is
-`reStructuredText`_, developed by the `docutils`_ project, amended by custom
-directives and using a toolset named *Sphinx* to postprocess the HTML output.
-
-This document describes the style guide for our documentation, the custom
-reStructuredText markup introduced to support Python documentation and how it
-should be used, as well as the Sphinx build system.
-
-.. _reStructuredText: http://docutils.sf.net/rst.html
-.. _docutils: http://docutils.sf.net/
-
-If you're interested in contributing to Python's documentation, there's no need
-to write reStructuredText if you're not so inclined; plain text contributions
-are more than welcome as well.
-
-.. toctree::
-
- intro.rst
- style.rst
- rest.rst
- markup.rst
- sphinx.rst
-
-.. XXX add credits, thanks etc.
-
diff --git a/converter/newfiles/doc_intro.rst b/converter/newfiles/doc_intro.rst
deleted file mode 100644
index e02ad7de..00000000
--- a/converter/newfiles/doc_intro.rst
+++ /dev/null
@@ -1,29 +0,0 @@
-Introduction
-============
-
-Python's documentation has long been considered to be good for a free
-programming language. There are a number of reasons for this, the most
-important being the early commitment of Python's creator, Guido van Rossum, to
-providing documentation on the language and its libraries, and the continuing
-involvement of the user community in providing assistance for creating and
-maintaining documentation.
-
-The involvement of the community takes many forms, from authoring to bug reports
-to just plain complaining when the documentation could be more complete or
-easier to use.
-
-This document is aimed at authors and potential authors of documentation for
-Python. More specifically, it is for people contributing to the standard
-documentation and developing additional documents using the same tools as the
-standard documents. This guide will be less useful for authors using the Python
-documentation tools for topics other than Python, and less useful still for
-authors not using the tools at all.
-
-If your interest is in contributing to the Python documentation, but you don't
-have the time or inclination to learn reStructuredText and the markup structures
-documented here, there's a welcoming place for you among the Python contributors
-as well. Any time you feel that you can clarify existing documentation or
-provide documentation that's missing, the existing documentation team will
-gladly work with you to integrate your text, dealing with the markup for you.
-Please don't let the material in this document stand between the documentation
-and your desire to help out! \ No newline at end of file
diff --git a/converter/newfiles/doc_markup.rst b/converter/newfiles/doc_markup.rst
deleted file mode 100644
index a1658e95..00000000
--- a/converter/newfiles/doc_markup.rst
+++ /dev/null
@@ -1,742 +0,0 @@
-.. highlightlang:: rest
-
-Additional Markup Constructs
-============================
-
-Sphinx adds a lot of new directives and interpreted text roles to standard reST
-markup. This section contains the reference material for these facilities.
-Documentation for "standard" reST constructs is not included here, though
-they are used in the Python documentation.
-
-XXX: file-wide metadata
-
-Meta-information markup
------------------------
-
-.. describe:: sectionauthor
-
- Identifies the author of the current section. The argument should include
- the author's name such that it can be used for presentation (though it isn't)
- and email address. The domain name portion of the address should be lower
- case. Example::
-
- .. sectionauthor:: Guido van Rossum <guido@python.org>
-
- Currently, this markup isn't reflected in the output in any way, but it helps
- keep track of contributions.
-
-
-Module-specific markup
-----------------------
-
-The markup described in this section is used to provide information about a
-module being documented. Each module should be documented in its own file.
-Normally this markup appears after the title heading of that file; a typical
-file might start like this::
-
- :mod:`parrot` -- Dead parrot access
- ===================================
-
- .. module:: parrot
- :platform: Unix, Windows
- :synopsis: Analyze and reanimate dead parrots.
- .. moduleauthor:: Eric Cleese <eric@python.invalid>
- .. moduleauthor:: John Idle <john@python.invalid>
-
-As you can see, the module-specific markup consists of two directives, the
-``module`` directive and the ``moduleauthor`` directive.
-
-.. describe:: module
-
- This directive marks the beginning of the description of a module (or package
- submodule, in which case the name should be fully qualified, including the
- package name).
-
- The ``platform`` option, if present, is a comma-separated list of the
- platforms on which the module is available (if it is available on all
- platforms, the option should be omitted). The keys are short identifiers;
- examples that are in use include "IRIX", "Mac", "Windows", and "Unix". It is
- important to use a key which has already been used when applicable.
-
- The ``synopsis`` option should consist of one sentence describing the
- module's purpose -- it is currently only used in the Global Module Index.
-
-.. describe:: moduleauthor
-
- The ``moduleauthor`` directive, which can appear multiple times, names the
- authors of the module code, just like ``sectionauthor`` names the author(s)
- of a piece of documentation. It too does not result in any output currently.
-
-
-.. note::
-
- It is important to make the section title of a module-describing file
- meaningful since that value will be inserted in the table-of-contents trees
- in overview files.
-
-
-Information units
------------------
-
-There are a number of directives used to describe specific features provided by
-modules. Each directive requires one or more signatures to provide basic
-information about what is being described, and the content should be the
-description. The basic version makes entries in the general index; if no index
-entry is desired, you can give the directive option flag ``:noindex:``. The
-following example shows all of the features of this directive type::
-
- .. function:: spam(eggs)
- ham(eggs)
- :noindex:
-
- Spam or ham the foo.
-
-The signatures of object methods or data attributes should always include the
-type name (``.. method:: FileInput.input(...)``), even if it is obvious from the
-context which type they belong to; this is to enable consistent
-cross-references. If you describe methods belonging to an abstract protocol,
-such as "context managers", include a (pseudo-)type name too to make the
-index entries more informative.
-
-The directives are:
-
-.. describe:: cfunction
-
- Describes a C function. The signature should be given as in C, e.g.::
-
- .. cfunction:: PyObject* PyType_GenericAlloc(PyTypeObject *type, Py_ssize_t nitems)
-
- This is also used to describe function-like preprocessor macros. The names
- of the arguments should be given so they may be used in the description.
-
- Note that you don't have to backslash-escape asterisks in the signature,
- as it is not parsed by the reST inliner.
-
-.. describe:: cmember
-
- Describes a C struct member. Example signature::
-
- .. cmember:: PyObject* PyTypeObject.tp_bases
-
- The text of the description should include the range of values allowed, how
- the value should be interpreted, and whether the value can be changed.
- References to structure members in text should use the ``member`` role.
-
-.. describe:: cmacro
-
- Describes a "simple" C macro. Simple macros are macros which are used
- for code expansion, but which do not take arguments so cannot be described as
- functions. This is not to be used for simple constant definitions. Examples
- of its use in the Python documentation include :cmacro:`PyObject_HEAD` and
- :cmacro:`Py_BEGIN_ALLOW_THREADS`.
-
-.. describe:: ctype
-
- Describes a C type. The signature should just be the type name.
-
-.. describe:: cvar
-
- Describes a global C variable. The signature should include the type, such
- as::
-
- .. cvar:: PyObject* PyClass_Type
-
-.. describe:: data
-
- Describes global data in a module, including both variables and values used
- as "defined constants." Class and object attributes are not documented
- using this environment.
-
-.. describe:: exception
-
- Describes an exception class. The signature can, but need not include
- parentheses with constructor arguments.
-
-.. describe:: function
-
- Describes a module-level function. The signature should include the
- parameters, enclosing optional parameters in brackets. Default values can be
- given if it enhances clarity. For example::
-
- .. function:: Timer.repeat([repeat=3[, number=1000000]])
-
- Object methods are not documented using this directive. Bound object methods
- placed in the module namespace as part of the public interface of the module
- are documented using this, as they are equivalent to normal functions for
- most purposes.
-
- The description should include information about the parameters required and
- how they are used (especially whether mutable objects passed as parameters
- are modified), side effects, and possible exceptions. A small example may be
- provided.
-
-.. describe:: class
-
- Describes a class. The signature can include parentheses with parameters
- which will be shown as the constructor arguments.
-
-.. describe:: attribute
-
- Describes an object data attribute. The description should include
- information about the type of the data to be expected and whether it may be
- changed directly.
-
-.. describe:: method
-
- Describes an object method. The parameters should not include the ``self``
- parameter. The description should include similar information to that
- described for ``function``.
-
-.. describe:: opcode
-
- Describes a Python bytecode instruction.
-
-
-There is also a generic version of these directives:
-
-.. describe:: describe
-
- This directive produces the same formatting as the specific ones explained
- above but does not create index entries or cross-referencing targets. It is
- used, for example, to describe the directives in this document. Example::
-
- .. describe:: opcode
-
- Describes a Python bytecode instruction.
-
-
-Showing code examples
----------------------
-
-Examples of Python source code or interactive sessions are represented using
-standard reST literal blocks. They are started by a ``::`` at the end of the
-preceding paragraph and delimited by indentation.
-
-Representing an interactive session requires including the prompts and output
-along with the Python code. No special markup is required for interactive
-sessions. After the last line of input or output presented, there should not be
-an "unused" primary prompt; this is an example of what *not* to do::
-
- >>> 1 + 1
- 2
- >>>
-
-Syntax highlighting is handled in a smart way:
-
-* There is a "highlighting language" for each source file. Per default,
- this is ``'python'`` as the majority of files will have to highlight Python
- snippets.
-
-* Within Python highlighting mode, interactive sessions are recognized
- automatically and highlighted appropriately.
-
-* The highlighting language can be changed using the ``highlightlang``
- directive, used as follows::
-
- .. highlightlang:: c
-
- This language is used until the next ``highlightlang`` directive is
- encountered.
-
-* The valid values for the highlighting language are:
-
- * ``python`` (the default)
- * ``c``
- * ``rest``
- * ``none`` (no highlighting)
-
-* If highlighting with the current language fails, the block is not highlighted
- in any way.
-
-Longer displays of verbatim text may be included by storing the example text in
-an external file containing only plain text. The file may be included using the
-standard ``include`` directive with the ``literal`` option flag. For example,
-to include the Python source file :file:`example.py`, use::
-
- .. include:: example.py
- :literal:
-
-
-Inline markup
--------------
-
-As said before, Sphinx uses interpreted text roles to insert semantic markup in
-documents.
-
-The default role is ``var``, as that was one of the most common macros used in
-the old LaTeX docs. That means that you can use ```var``` to refer to a
-variable named "var".
-
-For all other roles, you have to write ``:rolename:`content```.
-
-The following roles refer to objects in modules and are possibly hyperlinked if
-a matching identifier is found:
-
-.. describe:: mod
-
- The name of a module; a dotted name may be used. This should also be used for
- package names.
-
-.. describe:: func
-
- The name of a Python function; dotted names may be used. The role text
- should include trailing parentheses to enhance readability. The parentheses
- are stripped when searching for identifiers.
-
-.. describe:: data
-
- The name of a module-level variable.
-
-.. describe:: const
-
- The name of a "defined" constant. This may be a C-language ``#define``
- or a Python variable that is not intended to be changed.
-
-.. describe:: class
-
- A class name; a dotted name may be used.
-
-.. describe:: meth
-
- The name of a method of an object. The role text should include the type
- name, method name and the trailing parentheses. A dotted name may be used.
-
-.. describe:: attr
-
- The name of a data attribute of an object.
-
-.. describe:: exc
-
- The name of an exception. A dotted name may be used.
-
-The name enclosed in this markup can include a module name and/or a class name.
-For example, ``:func:`filter``` could refer to a function named ``filter`` in
-the current module, or the built-in function of that name. In contrast,
-``:func:`foo.filter``` clearly refers to the ``filter`` function in the ``foo``
-module.
-
-A similar heuristic is used to determine whether the name is an attribute of
-the currently documented class.
-
-The following roles create cross-references to C-language constructs if they
-are defined in the API documentation:
-
-.. describe:: cdata
-
- The name of a C-language variable.
-
-.. describe:: cfunc
-
- The name of a C-language function. Should include trailing parentheses.
-
-.. describe:: cmacro
-
- The name of a "simple" C macro, as defined above.
-
-.. describe:: ctype
-
- The name of a C-language type.
-
-
-The following role does possibly create a cross-reference, but does not refer
-to objects:
-
-.. describe:: token
-
- The name of a grammar token (used in the reference manual to create links
- between production displays).
-
----------
-
-The following roles don't do anything special except formatting the text
-in a different style:
-
-.. describe:: command
-
- The name of an OS-level command, such as ``rm``.
-
-.. describe:: dfn
-
- Mark the defining instance of a term in the text. (No index entries are
- generated.)
-
-.. describe:: envvar
-
- An environment variable. Index entries are generated.
-
-.. describe:: file
-
- The name of a file or directory. Within the contents, you can use curly
- braces to indicate a "variable" part, for example::
-
- ... is installed in :file:`/usr/lib/python2.{x}/site-packages` ...
-
- In the built documentation, the ``x`` will be displayed differently to
- indicate that it is to be replaced by the Python minor version.
-
-.. describe:: guilabel
-
- Labels presented as part of an interactive user interface should be marked
- using ``guilabel``. This includes labels from text-based interfaces such as
- those created using :mod:`curses` or other text-based libraries. Any label
- used in the interface should be marked with this role, including button
- labels, window titles, field names, menu and menu selection names, and even
- values in selection lists.
-
-.. describe:: kbd
-
- Mark a sequence of keystrokes. What form the key sequence takes may depend
- on platform- or application-specific conventions. When there are no relevant
- conventions, the names of modifier keys should be spelled out, to improve
- accessibility for new users and non-native speakers. For example, an
- *xemacs* key sequence may be marked like ``:kbd:`C-x C-f```, but without
- reference to a specific application or platform, the same sequence should be
- marked as ``:kbd:`Control-x Control-f```.
-
-.. describe:: keyword
-
- The name of a keyword in a programming language.
-
-.. describe:: mailheader
-
- The name of an RFC 822-style mail header. This markup does not imply that
- the header is being used in an email message, but can be used to refer to any
- header of the same "style." This is also used for headers defined by the
- various MIME specifications. The header name should be entered in the same
- way it would normally be found in practice, with the camel-casing conventions
- being preferred where there is more than one common usage. For example:
- ``:mailheader:`Content-Type```.
-
-.. describe:: makevar
-
- The name of a :command:`make` variable.
-
-.. describe:: manpage
-
- A reference to a Unix manual page including the section,
- e.g. ``:manpage:`ls(1)```.
-
-.. describe:: menuselection
-
- Menu selections should be marked using the ``menuselection`` role. This is
- used to mark a complete sequence of menu selections, including selecting
- submenus and choosing a specific operation, or any subsequence of such a
- sequence. The names of individual selections should be separated by
- ``-->``.
-
- For example, to mark the selection "Start > Programs", use this markup::
-
- :menuselection:`Start --> Programs`
-
- When including a selection that includes some trailing indicator, such as the
- ellipsis some operating systems use to indicate that the command opens a
- dialog, the indicator should be omitted from the selection name.
-
-.. describe:: mimetype
-
- The name of a MIME type, or a component of a MIME type (the major or minor
- portion, taken alone).
-
-.. describe:: newsgroup
-
- The name of a Usenet newsgroup.
-
-.. describe:: option
-
- A command-line option to an executable program. The leading hyphen(s) must
- be included.
-
-.. describe:: program
-
- The name of an executable program. This may differ from the file name for
- the executable for some platforms. In particular, the ``.exe`` (or other)
- extension should be omitted for Windows programs.
-
-.. describe:: regexp
-
- A regular expression. Quotes should not be included.
-
-.. describe:: var
-
- A Python or C variable or parameter name.
-
-
-The following roles generate external links:
-
-.. describe:: pep
-
- A reference to a Python Enhancement Proposal. This generates appropriate
- index entries. The text "PEP *number*\ " is generated; in the HTML output,
- this text is a hyperlink to an online copy of the specified PEP.
-
-.. describe:: rfc
-
- A reference to an Internet Request for Comments. This generates appropriate
- index entries. The text "RFC *number*\ " is generated; in the HTML output,
- this text is a hyperlink to an online copy of the specified RFC.
-
-
-Note that there are no special roles for including hyperlinks as you can use
-the standard reST markup for that purpose.
-
-
-.. _doc-ref-role:
-
-Cross-linking markup
---------------------
-
-To support cross-referencing to arbitrary sections in the documentation, the
-standard reST labels are "abused" a bit: Every label must precede a section
-title; and every label name must be unique throughout the entire documentation
-source.
-
-You can then reference to these sections using the ``:ref:`label-name``` role.
-
-Example::
-
- .. _my-reference-label:
-
- Section to cross-reference
- --------------------------
-
- This is the text of the section.
-
- It refers to the section itself, see :ref:`my-reference-label`.
-
-The ``:ref:`` invocation is replaced with the section title.
-
-
-Paragraph-level markup
-----------------------
-
-These directives create short paragraphs and can be used inside information
-units as well as normal text:
-
-.. describe:: note
-
- An especially important bit of information about an API that a user should be
- aware of when using whatever bit of API the note pertains to. The content of
- the directive should be written in complete sentences and include all
- appropriate punctuation.
-
- Example::
-
- .. note::
-
- This function is not suitable for sending spam e-mails.
-
-.. describe:: warning
-
- An important bit of information about an API that a user should be very aware
- of when using whatever bit of API the warning pertains to. The content of
- the directive should be written in complete sentences and include all
- appropriate punctuation. This differs from ``note`` in that it is recommended
- over ``note`` for information regarding security.
-
-.. describe:: versionadded
-
- This directive documents the version of Python which added the described
- feature to the library or C API. When this applies to an entire module, it
- should be placed at the top of the module section before any prose.
-
- The first argument must be given and is the version in question; you can add
- a second argument consisting of a *brief* explanation of the change.
-
- Example::
-
- .. versionadded:: 2.5
- The `spam` parameter.
-
- Note that there must be no blank line between the directive head and the
- explanation; this is to make these blocks visually continuous in the markup.
-
-.. describe:: versionchanged
-
- Similar to ``versionadded``, but describes when and what changed in the named
- feature in some way (new parameters, changed side effects, etc.).
-
---------------
-
-.. describe:: seealso
-
- Many sections include a list of references to module documentation or
- external documents. These lists are created using the ``seealso`` directive.
-
- The ``seealso`` directive is typically placed in a section just before any
- sub-sections. For the HTML output, it is shown boxed off from the main flow
- of the text.
-
- The content of the ``seealso`` directive should be a reST definition list.
- Example::
-
- .. seealso::
-
- Module :mod:`zipfile`
- Documentation of the :mod:`zipfile` standard module.
-
- `GNU tar manual, Basic Tar Format <http://link>`_
- Documentation for tar archive files, including GNU tar extensions.
-
-.. describe:: rubric
-
- This directive creates a paragraph heading that is not used to create a
- table of contents node. It is currently used for the "Footnotes" caption.
-
-.. describe:: centered
-
- This directive creates a centered boldfaced paragraph. Use it as follows::
-
- .. centered::
-
- Paragraph contents.
-
-
-Table-of-contents markup
-------------------------
-
-Since reST does not have facilities to interconnect several documents, or split
-documents into multiple output files, Sphinx uses a custom directive to add
-relations between the single files the documentation is made of, as well as
-tables of contents. The ``toctree`` directive is the central element.
-
-.. describe:: toctree
-
- This directive inserts a "TOC tree" at the current location, using the
- individual TOCs (including "sub-TOC trees") of the files given in the
- directive body. A numeric ``maxdepth`` option may be given to indicate the
- depth of the tree; by default, all levels are included.
-
- Consider this example (taken from the library reference index)::
-
- .. toctree::
- :maxdepth: 2
-
- intro.rst
- strings.rst
- datatypes.rst
- numeric.rst
- (many more files listed here)
-
- This accomplishes two things:
-
- * Tables of contents from all those files are inserted, with a maximum depth
- of two, that means one nested heading. ``toctree`` directives in those
- files are also taken into account.
- * Sphinx knows that the relative order of the files ``intro.rst``,
- ``strings.rst`` and so forth, and it knows that they are children of the
- shown file, the library index. From this information it generates "next
- chapter", "previous chapter" and "parent chapter" links.
-
- In the end, all files included in the build process must occur in one
- ``toctree`` directive; Sphinx will emit a warning if it finds a file that is
- not included, because that means that this file will not be reachable through
- standard navigation.
-
- The special file ``contents.rst`` at the root of the source directory is the
- "root" of the TOC tree hierarchy; from it the "Contents" page is generated.
-
-
-Index-generating markup
------------------------
-
-Sphinx automatically creates index entries from all information units (like
-functions, classes or attributes) like discussed before.
-
-However, there is also an explicit directive available, to make the index more
-comprehensive and enable index entries in documents where information is not
-mainly contained in information units, such as the language reference.
-
-The directive is ``index`` and contains one or more index entries. Each entry
-consists of a type and a value, separated by a colon.
-
-For example::
-
- .. index::
- single: execution!context
- module: __main__
- module: sys
- triple: module; search; path
-
-This directive contains five entries, which will be converted to entries in the
-generated index which link to the exact location of the index statement (or, in
-case of offline media, the corresponding page number).
-
-The possible entry types are:
-
-single
- Creates a single index entry. Can be made a subentry by separating the
- subentry text with a semicolon (this is also used below to describe what
- entries are created).
-pair
- ``pair: loop; statement`` is a shortcut that creates two index entries,
- namely ``loop; statement`` and ``statement; loop``.
-triple
- Likewise, ``triple: module; search; path`` is a shortcut that creates three
- index entries, which are ``module; search path``, ``search; path, module`` and
- ``path; module search``.
-module, keyword, operator, object, exception, statement, builtin
- These all create two index entries. For example, ``module: hashlib`` creates
- the entries ``module; hashlib`` and ``hashlib; module``.
-
-
-Grammar production displays
----------------------------
-
-Special markup is available for displaying the productions of a formal grammar.
-The markup is simple and does not attempt to model all aspects of BNF (or any
-derived forms), but provides enough to allow context-free grammars to be
-displayed in a way that causes uses of a symbol to be rendered as hyperlinks to
-the definition of the symbol. There is this directive:
-
-.. describe:: productionlist
-
- This directive is used to enclose a group of productions. Each production is
- given on a single line and consists of a name, separated by a colon from the
- following definition. If the definition spans multiple lines, each
- continuation line must begin with a colon placed at the same column as in the
- first line.
-
- Blank lines are not allowed within ``productionlist`` directive arguments.
-
- The definition can contain token names which are marked as interpreted text
- (e.g. ``sum ::= `integer` "+" `integer```) -- this generates cross-references
- to the productions of these tokens. Note that vertical bars used to indicate
- alternatives must be escaped with backslashes because otherwise they would
- indicate a substitution reference to the reST parser.
-
-
-.. XXX describe optional first parameter
-
-The following is an example taken from the Python Reference Manual::
-
- .. productionlist::
- try_stmt: try1_stmt \| try2_stmt
- try1_stmt: "try" ":" :token:`suite`
- : ("except" [:token:`expression` ["," :token:`target`]] ":" :token:`suite`)+
- : ["else" ":" :token:`suite`]
- : ["finally" ":" :token:`suite`]
- try2_stmt: "try" ":" :token:`suite`
- : "finally" ":" :token:`suite`
-
-
-Substitutions
--------------
-
-The documentation system provides three substitutions that are defined by default.
-They are set in the build configuration file, see :ref:`doc-build-config`.
-
-.. describe:: |release|
-
- Replaced by the Python release the documentation refers to. This is the full
- version string including alpha/beta/release candidate tags, e.g. ``2.5.2b3``.
-
-.. describe:: |version|
-
- Replaced by the Python version the documentation refers to. This consists
- only of the major and minor version parts, e.g. ``2.5``, even for version
- 2.5.1.
-
-.. describe:: |today|
-
- Replaced by either today's date, or the date set in the build configuration
- file. Normally has the format ``April 14, 2007``.
diff --git a/converter/newfiles/doc_rest.rst b/converter/newfiles/doc_rest.rst
deleted file mode 100644
index 11d111f5..00000000
--- a/converter/newfiles/doc_rest.rst
+++ /dev/null
@@ -1,232 +0,0 @@
-.. highlightlang:: rest
-
-reStructuredText Primer
-=======================
-
-This section is a brief introduction to reStructuredText (reST) concepts and
-syntax, intended to provide authors with enough information to author
-documents productively.
-Since reST was designed to be a simple, unobtrusive markup language, this will
-not take too long.
-
-.. seealso::
-
- The authoritative `reStructuredText User
- Documentation <http://docutils.sourceforge.net/rst.html>`_.
-
-
-Paragraphs
-----------
-
-The paragraph is the most basic block in a reST document.
-Paragraphs are simply chunks of text
-separated by one or more blank lines. As in Python, indentation is significant
-in reST, so all lines of the same paragraph must be left-aligned
-to the same level of indentation.
-
-
-Inline markup
--------------
-
-The standard reST inline markup is quite simple: use
-
-* one asterisk: ``*text*`` for emphasis (italics),
-* two asterisks: ``**text**`` for strong emphasis (boldface), and
-* backquotes: ````text```` for code samples.
-
-If asterisks or backquotes appear in running text and could be confused with
-inline markup delimiters, they have to be escaped with a backslash.
-
-Be aware of some restrictions of this markup:
-
-* it may not be nested,
-* content may not start or end with whitespace: ``* text*`` is wrong,
-* it must be separated from surrounding text by non-word characters. Use a
- backslash escaped space to work around that: ``thisis\ *one*\ word``.
-
-These restrictions may be lifted in future versions of the docutils.
-
-reST also allows for custom "interpreted text roles"', which signify that the
-enclosed text should be interpreted in a specific way. Sphinx uses this to
-provide semantic markup and cross-referencing of identifiers, as described in
-the appropriate section. The general syntax is ``:rolename:`content```.
-
-
-Lists and Quotes
-----------------
-
-List markup is natural: just place an asterisk at the start of a paragraph and
-indent properly. The same goes for numbered lists; they can also be
-autonumbered using a ``#`` sign::
-
- * This is a bulleted list.
- * It has two items, the second
- item uses two lines.
-
- #. This is a numbered list.
- #. It has two items too.
-
-Nested lists are possible, but be aware that they must be separated from the
-parent list items by blank lines::
-
- * this is
- * a list
-
- * with a nested list
- * and some subitems
-
- * and here the parent list continues
-
-Definition lists are created as follows::
-
- term (up to a line of text)
- Definition of the term, which must be indented
-
- and can even consist of multiple paragraphs
-
- next term
- Description.
-
-
-Paragraphs are quoted by just indenting them more than the surrounding
-paragraphs.
-
-
-Source Code
------------
-
-Literal code blocks are introduced by ending a paragraph with the special marker
-``::``. The literal block must be indented, to be able to include blank lines::
-
- This is a normal text paragraph. The next paragraph is a code sample::
-
- It is not processed in any way, except
- that the indentation is removed.
-
- It can span multiple lines.
-
- This is a normal text paragraph again.
-
-The handling of the ``::`` marker is smart:
-
-* If it occurs as a paragraph of its own, that paragraph is completely left
- out of the document.
-* If it is preceded by whitespace, the marker is removed.
-* If it is preceded by non-whitespace, the marker is replaced by a single
- colon.
-
-That way, the second sentence in the above example's first paragraph would be
-rendered as "The next paragraph is a code sample:".
-
-
-Hyperlinks
-----------
-
-External links
-^^^^^^^^^^^^^^
-
-Use ```Link text <http://target>`_`` for inline web links. If the link text
-should be the web address, you don't need special markup at all, the parser
-finds links and mail addresses in ordinary text.
-
-Internal links
-^^^^^^^^^^^^^^
-
-Internal linking is done via a special reST role, see the section on specific
-markup, :ref:`doc-ref-role`.
-
-
-Sections
---------
-
-Section headers are created by underlining (and optionally overlining) the
-section title with a punctuation character, at least as long as the text::
-
- =================
- This is a heading
- =================
-
-Normally, there are no heading levels assigned to certain characters as the
-structure is determined from the succession of headings. However, for the
-Python documentation, we use this convention:
-
-* ``#`` with overline, for parts
-* ``*`` with overline, for chapters
-* ``=``, for sections
-* ``-``, for subsections
-* ``^``, for subsubsections
-* ``"``, for paragraphs
-
-
-Explicit Markup
----------------
-
-"Explicit markup" is used in reST for most constructs that need special
-handling, such as footnotes, specially-highlighted paragraphs, comments, and
-generic directives.
-
-An explicit markup block begins with a line starting with ``..`` followed by
-whitespace and is terminated by the next paragraph at the same level of
-indentation. (There needs to be a blank line between explicit markup and normal
-paragraphs. This may all sound a bit complicated, but it is intuitive enough
-when you write it.)
-
-
-Directives
-----------
-
-A directive is a generic block of explicit markup. Besides roles, it is one of
-the extension mechanisms of reST, and Sphinx makes heavy use of it.
-
-Basically, a directive consists of a name, arguments, options and content. (Keep
-this terminology in mind, it is used in the next chapter describing custom
-directives.) Looking at this example, ::
-
- .. function:: foo(x)
- foo(y, z)
- :bar: no
-
- Return a line of text input from the user.
-
-``function`` is the directive name. It is given two arguments here, the
-remainder of the first line and the second line, as well as one option ``bar``
-(as you can see, options are given in the lines immediately following the
-arguments and indicated by the colons).
-
-The directive content follows after a blank line and is indented relative to the
-directive start.
-
-
-Footnotes
----------
-
-For footnotes, use ``[#]_`` to mark the footnote location, and add the footnote
-body at the bottom of the document after a "Footnotes" rubric heading, like so::
-
- Lorem ipsum [#]_ dolor sit amet ... [#]_
-
- .. rubric:: Footnotes
-
- .. [#] Text of the first footnote.
- .. [#] Text of the second footnote.
-
-
-Comments
---------
-
-Every explicit markup block which isn't a valid markup construct (like the
-footnotes above) is regared as a comment.
-
-
-Source encoding
----------------
-
-Since the easiest way to include special characters like em dashes or copyright
-signs in reST is to directly write them as Unicode characters, one has to
-specify an encoding:
-
-All Python documentation source files must be in UTF-8 encoding, and the HTML
-documents written from them will be in that encoding as well.
-
-
-XXX: Gotchas
diff --git a/converter/newfiles/doc_sphinx.rst b/converter/newfiles/doc_sphinx.rst
deleted file mode 100644
index 582bdbf7..00000000
--- a/converter/newfiles/doc_sphinx.rst
+++ /dev/null
@@ -1,60 +0,0 @@
-.. highlightlang:: rest
-
-The Sphinx build system
-=======================
-
-XXX: intro...
-
-.. _doc-build-config:
-
-The build configuration file
-----------------------------
-
-The documentation root, that is the ``Doc`` subdirectory of the source
-distribution, contains a file named ``conf.py``. This file is called the "build
-configuration file", and it contains several variables that are read and used
-during a build run.
-
-These variables are:
-
-version : string
- A string that is used as a replacement for the ``|version|`` reST
- substitution. It should be the Python version the documentation refers to.
- This consists only of the major and minor version parts, e.g. ``2.5``, even
- for version 2.5.1.
-
-release : string
- A string that is used as a replacement for the ``|release|`` reST
- substitution. It should be the full version string including
- alpha/beta/release candidate tags, e.g. ``2.5.2b3``.
-
-Both ``release`` and ``version`` can be ``'auto'``, which means that they are
-determined at runtime from the ``Include/patchlevel.h`` file, if a complete
-Python source distribution can be found, or else from the interpreter running
-Sphinx.
-
-today_fmt : string
- A ``strftime`` format that is used to format a replacement for the
- ``|today|`` reST substitution.
-
-today : string
- A string that can contain a date that should be written to the documentation
- output literally. If this is nonzero, it is used instead of
- ``strftime(today_fmt)``.
-
-unused_files : list of strings
- A list of reST filenames that are to be disregarded during building. This
- could be docs for temporarily disabled modules or documentation that's not
- yet ready for public consumption.
-
-last_updated_format : string
- If this is not an empty string, it will be given to ``time.strftime()`` and
- written to each generated output file after "last updated on:".
-
-use_smartypants : bool
- If true, use SmartyPants to convert quotes and dashes to the typographically
- correct entities.
-
-add_function_parentheses : bool
- If true, ``()`` will be appended to the content of ``:func:``, ``:meth:`` and
- ``:cfunc:`` cross-references. \ No newline at end of file
diff --git a/converter/newfiles/doc_style.rst b/converter/newfiles/doc_style.rst
deleted file mode 100644
index 64d7c36b..00000000
--- a/converter/newfiles/doc_style.rst
+++ /dev/null
@@ -1,57 +0,0 @@
-.. highlightlang:: rest
-
-Style Guide
-===========
-
-The Python documentation should follow the `Apple Publications Style Guide`_
-wherever possible. This particular style guide was selected mostly because it
-seems reasonable and is easy to get online.
-
-.. _Apple Publications Style Guide: http://developer.apple.com/documentation/UserExperience/Conceptual/APStyleGuide/AppleStyleGuide2003.pdf
-
-Topics which are not covered in the Apple's style guide will be discussed in
-this document if necessary.
-
-Footnotes are generally discouraged, though they may be used when they are the
-best way to present specific information. When a footnote reference is added at
-the end of the sentence, it should follow the sentence-ending punctuation. The
-reST markup should appear something like this::
-
- This sentence has a footnote reference. [#]_ This is the next sentence.
-
-Footnotes should be gathered at the end of a file, or if the file is very long,
-at the end of a section. The docutils will automatically create backlinks to the
-footnote reference.
-
-Footnotes may appear in the middle of sentences where appropriate.
-
-Many special names are used in the Python documentation, including the names of
-operating systems, programming languages, standards bodies, and the like. Most
-of these entities are not assigned any special markup, but the preferred
-spellings are given here to aid authors in maintaining the consistency of
-presentation in the Python documentation.
-
-Other terms and words deserve special mention as well; these conventions should
-be used to ensure consistency throughout the documentation:
-
-CPU
- For "central processing unit." Many style guides say this should be spelled
- out on the first use (and if you must use it, do so!). For the Python
- documentation, this abbreviation should be avoided since there's no
- reasonable way to predict which occurrence will be the first seen by the
- reader. It is better to use the word "processor" instead.
-
-POSIX
- The name assigned to a particular group of standards. This is always
- uppercase.
-
-Python
- The name of our favorite programming language is always capitalized.
-
-Unicode
- The name of a character set and matching encoding. This is always written
- capitalized.
-
-Unix
- The name of the operating system developed at AT&T Bell Labs in the early
- 1970s. \ No newline at end of file
diff --git a/converter/newfiles/ext_index.rst b/converter/newfiles/ext_index.rst
deleted file mode 100644
index 13332dcc..00000000
--- a/converter/newfiles/ext_index.rst
+++ /dev/null
@@ -1,34 +0,0 @@
-.. _extending-index:
-
-##################################################
- Extending and Embedding the Python Interpreter
-##################################################
-
-:Release: |version|
-:Date: |today|
-
-This document describes how to write modules in C or C++ to extend the Python
-interpreter with new modules. Those modules can define new functions but also
-new object types and their methods. The document also describes how to embed
-the Python interpreter in another application, for use as an extension language.
-Finally, it shows how to compile and link extension modules so that they can be
-loaded dynamically (at run time) into the interpreter, if the underlying
-operating system supports this feature.
-
-This document assumes basic knowledge about Python. For an informal
-introduction to the language, see :ref:`tutorial-index`. :ref:`reference-index`
-gives a more formal definition of the language. :ref:`modules-index` documents
-the existing object types, functions and modules (both built-in and written in
-Python) that give the language its wide application range.
-
-For a detailed description of the whole Python/C API, see the separate
-:ref:`c-api-index`.
-
-.. toctree::
- :maxdepth: 2
-
- extending.rst
- newtypes.rst
- building.rst
- windows.rst
- embedding.rst
diff --git a/converter/newfiles/mac_index.rst b/converter/newfiles/mac_index.rst
deleted file mode 100644
index df7955dd..00000000
--- a/converter/newfiles/mac_index.rst
+++ /dev/null
@@ -1,34 +0,0 @@
-.. _maclib-index:
-
-##############################
- Macintosh Library Modules
-##############################
-
-:Release: |version|
-:Date: |today|
-
-This library reference manual documents Python's extensions for the Macintosh.
-It should be used in conjunction with :ref:`library-index`, which documents the
-standard library and built-in types.
-
-This manual assumes basic knowledge about the Python language. For an informal
-introduction to Python, see :ref:`tutorial-index`; :ref:`reference-index`
-remains the highest authority on syntactic and semantic questions. Finally, the
-manual entitled :ref:`extending-index` describes how to add new extensions to
-Python and how to embed it in other applications.
-
-.. toctree::
- :maxdepth: 2
-
- using.rst
- mac.rst
- macic.rst
- macos.rst
- macostools.rst
- macui.rst
- framework.rst
- autogil.rst
- scripting.rst
- toolbox.rst
- colorpicker.rst
- undoc.rst
diff --git a/converter/newfiles/modules_index.rst b/converter/newfiles/modules_index.rst
deleted file mode 100644
index d8dd2d0a..00000000
--- a/converter/newfiles/modules_index.rst
+++ /dev/null
@@ -1,73 +0,0 @@
-.. _library-index:
-
-###############################
- The Python standard library
-###############################
-
-:Release: |version|
-:Date: |today|
-
-While :ref:`reference-index` describes the exact syntax and semantics of the
-language, it does not describe the standard library that is distributed with the
-language, and which greatly enhances its immediate usability. This library
-contains built-in modules (written in C) that provide access to system
-functionality such as file I/O that would otherwise be inaccessible to Python
-programmers, as well as modules written in Python that provide standardized
-solutions for many problems that occur in everyday programming. Some of these
-modules are explicitly designed to encourage and enhance the portability of
-Python programs.
-
-This library reference manual documents Python's standard library, as well as
-many optional library modules (which may or may not be available, depending on
-whether the underlying platform supports them and on the configuration choices
-made at compile time). It also documents the standard types of the language and
-its built-in functions and exceptions, many of which are not or incompletely
-documented in the Reference Manual.
-
-
-.. toctree::
- :maxdepth: 2
-
- intro.rst
- functions.rst
- constants.rst
- objects.rst
- stdtypes.rst
- exceptions.rst
-
- strings.rst
- datatypes.rst
- numeric.rst
- netdata.rst
- markup.rst
- fileformats.rst
- crypto.rst
- filesys.rst
- archiving.rst
- persistence.rst
- allos.rst
- someos.rst
- unix.rst
- ipc.rst
- internet.rst
- mm.rst
- tkinter.rst
- i18n.rst
- frameworks.rst
- development.rst
- pdb.rst
- profile.rst
- hotshot.rst
- timeit.rst
- trace.rst
- python.rst
- custominterp.rst
- restricted.rst
- modules.rst
- language.rst
- compiler.rst
- misc.rst
- sgi.rst
- sun.rst
- windows.rst
- undoc.rst
diff --git a/converter/newfiles/ref_index.rst b/converter/newfiles/ref_index.rst
deleted file mode 100644
index 18bf0537..00000000
--- a/converter/newfiles/ref_index.rst
+++ /dev/null
@@ -1,30 +0,0 @@
-.. _reference-index:
-
-#################################
- The Python language reference
-#################################
-
-:Release: |version|
-:Date: |today|
-
-This reference manual describes the syntax and "core semantics" of the
-language. It is terse, but attempts to be exact and complete. The semantics of
-non-essential built-in object types and of the built-in functions and modules
-are described in :ref:`library-index`. For an informal introduction to the
-language, see :ref:`tutorial-index`. For C or C++ programmers, two additional
-manuals exist: :ref:`extending-index` describes the high-level picture of how to
-write a Python extension module, and the :ref:`c-api-index` describes the
-interfaces available to C/C++ programmers in detail.
-
-.. toctree::
- :maxdepth: 2
-
- introduction.rst
- lexical_analysis.rst
- datamodel.rst
- executionmodel.rst
- expressions.rst
- simple_stmts.rst
- compound_stmts.rst
- toplevel_components.rst
-
diff --git a/converter/newfiles/tutorial_index.rst b/converter/newfiles/tutorial_index.rst
deleted file mode 100644
index 7309b7c7..00000000
--- a/converter/newfiles/tutorial_index.rst
+++ /dev/null
@@ -1,60 +0,0 @@
-.. _tutorial-index:
-
-######################
- The Python tutorial
-######################
-
-:Release: |version|
-:Date: |today|
-
-Python is an easy to learn, powerful programming language. It has efficient
-high-level data structures and a simple but effective approach to
-object-oriented programming. Python's elegant syntax and dynamic typing,
-together with its interpreted nature, make it an ideal language for scripting
-and rapid application development in many areas on most platforms.
-
-The Python interpreter and the extensive standard library are freely available
-in source or binary form for all major platforms from the Python Web site,
-http://www.python.org/, and may be freely distributed. The same site also
-contains distributions of and pointers to many free third party Python modules,
-programs and tools, and additional documentation.
-
-The Python interpreter is easily extended with new functions and data types
-implemented in C or C++ (or other languages callable from C). Python is also
-suitable as an extension language for customizable applications.
-
-This tutorial introduces the reader informally to the basic concepts and
-features of the Python language and system. It helps to have a Python
-interpreter handy for hands-on experience, but all examples are self-contained,
-so the tutorial can be read off-line as well.
-
-For a description of standard objects and modules, see the Python Library
-Reference document. The Python Reference Manual gives a more formal definition
-of the language. To write extensions in C or C++, read Extending and Embedding
-the Python Interpreter and Python/C API Reference. There are also several books
-covering Python in depth.
-
-This tutorial does not attempt to be comprehensive and cover every single
-feature, or even every commonly used feature. Instead, it introduces many of
-Python's most noteworthy features, and will give you a good idea of the
-language's flavor and style. After reading it, you will be able to read and
-write Python modules and programs, and you will be ready to learn more about the
-various Python library modules described in the Python Library Reference.
-
-.. toctree::
-
- appetite.rst
- interpreter.rst
- introduction.rst
- controlflow.rst
- datastructures.rst
- modules.rst
- inputoutput.rst
- errors.rst
- classes.rst
- stdlib.rst
- stdlib2.rst
- whatnow.rst
- interactive.rst
- floatingpoint.rst
- glossary.rst
diff --git a/converter/restwriter.py b/converter/restwriter.py
deleted file mode 100644
index da964c69..00000000
--- a/converter/restwriter.py
+++ /dev/null
@@ -1,962 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
- Python documentation ReST writer
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- How the converter works
- =======================
-
- A LaTeX document is tokenized by a `Tokenizer`. The tokens are processed by
- the `DocParser` class which emits a tree of `DocNode`\s. The `RestWriter`
- now walks this node tree and generates ReST from that.
-
- There are some intricacies while writing ReST:
-
- - Paragraph text must be rewrapped in order to avoid ragged lines. The
- `textwrap` module does that nicely, but it must obviously operate on a
- whole paragraph at a time. Therefore the contents of the current paragraph
- are cached in `self.curpar`. Every time a block level element is
- encountered, its node handler calls `self.flush_par()` which writes out a
- paragraph. Because this can be detrimental for the markup at several
- stages, the `self.noflush` context manager can be used to forbid paragraph
- flushing temporarily, which means that no block level nodes can be
- processed.
-
- - There are no inline comments in ReST. Therefore comments are stored in
- `self.comments` and written out every time the paragraph is flushed.
-
- - A similar thing goes for footnotes: `self.footnotes`.
-
- - Some inline markup cannot contain nested markup. Therefore the function
- `textonly()` exists which returns a node similar to its argument, but
- stripped of inline markup.
-
- - Some constructs need to format non-block-level nodes, but without writing
- the result to the current paragraph. These use `self.get_node_text()`
- which writes to a temporary paragraph and returns the resulting markup.
-
- - Indentation is important. The `self.indent` context manager helps keeping
- track of indentation levels.
-
- - Some blocks, like lists, need to prevent the first line from being
- indented because the indentation space is already filled (e.g. by a
- bullet). Therefore the `self.indent` context manager accepts a
- `firstline` flag which can be set to ``False``, resulting in the first
- line not being indented.
-
-
- There are some restrictions on markup compared to LaTeX:
-
- - Table cells may not contain blocks.
-
- - Hard line breaks don't exist.
-
- - Block level markup inside "alltt" environments doesn't work.
-
- :copyright: 2007-2008 by Georg Brandl.
- :license: BSD.
-"""
-
-# yay!
-from __future__ import with_statement
-
-import re
-import StringIO
-import textwrap
-
-WIDTH = 80
-INDENT = 3
-
-new_wordsep_re = re.compile(
- r'(\s+|' # any whitespace
- r'(?<=\s)(?::[a-z-]+:)?`\S+|' # interpreted text start
- r'[^\s\w]*\w+[a-zA-Z]-(?=\w+[a-zA-Z])|' # hyphenated words
- r'(?<=[\w\!\"\'\&\.\,\?])-{2,}(?=\w))') # em-dash
-
-import textwrap
-# monkey-patch...
-textwrap.TextWrapper.wordsep_re = new_wordsep_re
-wrapper = textwrap.TextWrapper(width=WIDTH, break_long_words=False)
-
-from .docnodes import RootNode, TextNode, NodeList, InlineNode, \
- CommentNode, EmptyNode
-from .util import fixup_text, empty, text, my_make_id, \
- repair_bad_inline_markup
-from .filenamemap import includes_mapping
-
-class WriterError(Exception):
- pass
-
-
-class Indenter(object):
- """ Context manager factory for indentation. """
- def __init__(self, writer):
- class IndenterManager(object):
- def __init__(self, indentlevel, flush, firstline):
- self.indentlevel = indentlevel
- self.flush = flush
- self.firstline = firstline
-
- def __enter__(self):
- writer.indentation += (self.indentlevel * ' ')
- writer.indentfirstline = self.firstline
- return self
-
- def __exit__(self, *ignored):
- if self.flush:
- writer.flush_par()
- writer.indentation = writer.indentation[:-self.indentlevel]
-
- self.manager = IndenterManager
-
- def __call__(self, indentlevel=INDENT, flush=True, firstline=True):
- return self.manager(indentlevel, flush, firstline)
-
-
-class NoFlush(object):
- """ Convenience context manager. """
- def __init__(self, writer):
- self.writer = writer
-
- def __enter__(self):
- self.writer.no_flushing += 1
-
- def __exit__(self, *ignored):
- self.writer.no_flushing -= 1
-
-
-class SectionMeta(object):
- def __init__(self):
- self.modname = ''
- self.platform = ''
- self.synopsis = []
- self.modauthors = []
- self.sectauthors = []
-
-
-class RestWriter(object):
- """ Write ReST from a node tree. """
-
- def __init__(self, fp, splitchap=False, toctree=None, deflang=None, labelprefix=''):
- self.splitchap = splitchap # split output at chapters?
- if splitchap:
- self.fp = StringIO.StringIO() # dummy one
- self.chapters = [self.fp]
- else:
- self.fp = fp # file pointer
- self.toctree = toctree # entries for the TOC tree
- self.deflang = deflang # default highlighting language
- self.labelprefix = labelprefix # prefix for all label names
-
- # indentation tools
- self.indentation = '' # current indentation string
- self.indentfirstline = True # indent the first line of next paragraph?
- self.indented = Indenter(self) # convenience context manager
-
- # paragraph flushing tools
- self.flush_cb = None # callback run on next paragraph flush, used
- # for properly separating field lists from
- # the following paragraph
- self.no_flushing = 0 # raise an error on paragraph flush?
- self.noflush = NoFlush(self) # convenience context manager
-
- # collected items to output later
- self.curpar = [] # text in current paragraph
- self.comments = [] # comments to be output after flushing
- self.indexentries = [] # indexentries to be output before flushing
- self.footnotes = [] # footnotes to be output at document end
- self.warnings = [] # warnings while writing
-
- # specials
- self.sectionlabel = '' # most recent \label command
- self.thisclass = '' # most recent classdesc name
- self.sectionmeta = None # current section metadata
- self.noescape = 0 # don't escape text nodes
- self.indexsubitem = '' # current \withsubitem text
-
- def write_document(self, rootnode):
- """ Write a document, represented by a RootNode. """
- assert type(rootnode) is RootNode
-
- if self.deflang:
- self.write_directive('highlightlang', self.deflang)
-
- self.visit_node(rootnode)
- self.write_footnotes()
-
- def new_chapter(self):
- """ Called if self.splitchap is True. Create a new file pointer
- and set self.fp to it. """
- new_fp = StringIO.StringIO()
- self.chapters.append(new_fp)
- self.fp = new_fp
-
- def write(self, text='', nl=True, first=False):
- """ Write a string to the output file. """
- if first:
- self.fp.write((self.indentation if self.indentfirstline else '') + text)
- self.indentfirstline = True
- elif text: # don't write indentation only
- self.fp.write(self.indentation + text)
- if nl:
- self.fp.write('\n')
-
- def write_footnotes(self):
- """ Write the current footnotes, if any. """
- self.flush_par()
- if self.footnotes:
- self.write('.. rubric:: Footnotes\n')
- footnotes = self.footnotes
- self.footnotes = [] # first clear since indented() will flush
- for footnode in footnotes:
- self.write('.. [#] ', nl=False)
- with self.indented(3, firstline=False):
- self.visit_node(footnode)
-
- def write_directive(self, name, args='', node=None, spabove=False, spbelow=True):
- """ Helper to write a ReST directive. """
- if spabove:
- self.write()
- self.write('.. %s::%s' % (name, args and ' '+args))
- if spbelow:
- self.write()
- with self.indented():
- if node is not None:
- self.visit_node(node)
-
- def write_sectionmeta(self):
- mod = self.sectionmeta
- self.sectionmeta = None
- if not mod:
- return
- if mod.modname:
- self.write('.. module:: %s' % mod.modname)
- if mod.platform:
- self.write(' :platform: %s' % mod.platform)
- if mod.synopsis:
- self.write(' :synopsis: %s' % mod.synopsis[0])
- for line in mod.synopsis[1:]:
- self.write(' %s' % line)
- if mod.modauthors:
- for author in mod.modauthors:
- self.write('.. moduleauthor:: %s' % author)
- if mod.sectauthors:
- for author in mod.sectauthors:
- self.write('.. sectionauthor:: %s' % author)
- self.write()
- self.write()
-
- indexentry_mapping = {
- 'index': 'single',
- 'indexii': 'pair',
- 'indexiii': 'triple',
- 'indexiv': 'quadruple',
- 'stindex': 'statement',
- 'ttindex': 'single',
- 'obindex': 'object',
- 'opindex': 'operator',
- 'kwindex': 'keyword',
- 'exindex': 'exception',
- 'bifuncindex': 'builtin',
- 'refmodindex': 'module',
- 'refbimodindex': 'module',
- 'refexmodindex': 'module',
- 'refstmodindex': 'module',
- }
-
- def get_indexentries(self, entries):
- """ Return a list of lines for the index entries. """
- def format_entry(cmdname, args, subitem):
- textargs = []
- for arg in args:
- if isinstance(arg, TextNode):
- textarg = text(arg)
- else:
- textarg = self.get_node_text(self.get_textonly_node(arg, warn=0))
- if ';' in textarg:
- raise WriterError("semicolon in index args: " + textarg)
- textarg += subitem
- textarg = textarg.replace('!', '; ')
- textargs.append(textarg)
- return '%s: %s' % (self.indexentry_mapping[cmdname],
- '; '.join(textarg for textarg in textargs
- if not empty(arg)))
-
- ret = []
- if len(entries) == 1:
- ret.append('.. index:: %s' % format_entry(*entries[0]))
- else:
- ret.append('.. index::')
- for entry in entries:
- ret.append(' %s' % format_entry(*entry))
- return ret
-
- def get_par(self, wrap, width=None):
- """ Get the contents of the current paragraph.
- Returns a list if wrap and not indent, else a string. """
- if not self.curpar:
- if wrap:
- return []
- else:
- return ''
- text = ''.join(self.curpar).lstrip()
- text = repair_bad_inline_markup(text)
- self.curpar = []
- if wrap:
- # returns a list!
- wrapper.width = width or WIDTH
- return wrapper.wrap(text)
- else:
- return text
-
- no_warn_textonly = set((
- 'var', 'code', 'textrm', 'emph', 'keyword', 'textit', 'programopt',
- 'cfunction', 'texttt', 'email', 'constant',
- ))
-
- def get_textonly_node(self, node, cmd='', warn=1):
- """ Return a similar Node or NodeList that only has TextNode subnodes.
-
- Warning values:
- - 0: never warn
- - 1: warn for markup losing information
- """
- if cmd == 'code':
- warn = 0
- def do(subnode):
- if isinstance(subnode, TextNode):
- return subnode
- if isinstance(subnode, NodeList):
- return NodeList(do(subsubnode) for subsubnode in subnode)
- if isinstance(subnode, CommentNode):
- # loses comments, but huh
- return EmptyNode()
- if isinstance(subnode, InlineNode):
- if subnode.cmdname in ('filevar', 'envvar'):
- return NodeList([TextNode('{'), do(subnode.args[0]), TextNode('}')])
- if subnode.cmdname == 'optional':
- # this is not mapped to ReST markup
- return subnode
- if len(subnode.args) == 1:
- if warn == 1 and subnode.cmdname not in self.no_warn_textonly:
- self.warnings.append('%r: Discarding %s markup in %r' %
- (cmd, subnode.cmdname, node))
- return do(subnode.args[0])
- elif len(subnode.args) == 0:
- # should only happen for IndexNodes which stay in
- return subnode
- elif len(subnode.args) == 2 and subnode.cmdname == 'refmodule':
- if not warn:
- return do(subnode.args[1])
- raise WriterError('get_textonly_node() failed for %r' % subnode)
- return do(node)
-
- def get_node_text(self, node, wrap=False, width=None):
- """ Write the node to a temporary paragraph and return the result
- as a string. """
- with self.noflush:
- self._old_curpar = self.curpar
- self.curpar = []
- self.visit_node(node)
- ret = self.get_par(wrap, width=width)
- self.curpar = self._old_curpar
- return ret
-
- def flush_par(self, nocb=False, nocomments=False):
- """ Write the current paragraph to the output file.
- Prepend index entries, append comments and footnotes. """
- if self.no_flushing:
- raise WriterError('called flush_par() while noflush active')
- if self.indexentries:
- for line in self.get_indexentries(self.indexentries):
- self.write(line)
- self.write()
- self.indexentries = []
- if self.flush_cb and not nocb:
- self.flush_cb()
- self.flush_cb = None
- par = self.get_par(wrap=True)
- if par:
- for i, line in enumerate(par):
- self.write(line, first=(i==0))
- self.write()
- if self.comments and not nocomments:
- for comment in self.comments:
- self.write('.. % ' + comment)
- self.write()
- self.comments = []
-
- def visit_wrapped(self, pre, node, post, noescape=False):
- """ Write a node within a paragraph, wrapped with pre and post strings. """
- if noescape:
- self.noescape += 1
- self.curpar.append(pre)
- with self.noflush:
- self.visit_node(node)
- self.curpar.append(post)
- if noescape:
- self.noescape -= 1
-
- def visit_node(self, node):
- """ "Write" a node (appends to curpar or writes something). """
- visitfunc = getattr(self, 'visit_' + node.__class__.__name__, None)
- if not visitfunc:
- raise WriterError('no visit function for %s node' % node.__class__)
- visitfunc(node)
-
- # ------------------------- node handlers -----------------------------
-
- def visit_RootNode(self, node):
- if node.params.get('title'):
- title = self.get_node_text(node.params['title'])
- hl = len(title)
- self.write('*' * (hl+4))
- self.write(' %s ' % title)
- self.write('*' * (hl+4))
- self.write()
-
- if node.params.get('author'):
- self.write(':Author: %s%s' %
- (self.get_node_text(node.params['author']),
- (' <%s>' % self.get_node_text(node.params['authoremail'])
- if 'authoremail' in node.params else '')))
- self.write()
-
- if node.params.get('date'):
- self.write(':Date: %s' % self.get_node_text(node.params['date']))
- self.write()
-
- if node.params.get('release'):
- self.write('.. |release| replace:: %s' %
- self.get_node_text(node.params['release']))
- self.write()
-
- self.visit_NodeList(node.children)
-
- def visit_NodeList(self, nodelist):
- for node in nodelist:
- self.visit_node(node)
-
- def visit_CommentNode(self, node):
- # no inline comments -> they are all output at the start of a new paragraph
- self.comments.append(node.comment.strip())
-
- sectchars = {
- 'chapter': '*',
- 'chapter*': '*',
- 'section': '=',
- 'subsection': '-',
- 'subsubsection': '^',
- 'paragraph': '"',
- }
-
- sectdoubleline = [
- 'chapter',
- 'chapter*',
- ]
-
- def visit_SectioningNode(self, node):
- self.flush_par()
- self.sectionlabel = ''
- self.thisclass = ''
- self.write()
-
- if self.splitchap and node.cmdname.startswith('chapter'):
- self.write_footnotes()
- self.new_chapter()
-
- heading = self.get_node_text(node.args[0]).strip()
- if self.sectionlabel:
- self.write('.. _%s:\n' % self.sectionlabel)
- hl = len(heading)
- if node.cmdname in self.sectdoubleline:
- self.write(self.sectchars[node.cmdname] * hl)
- self.write(heading)
- self.write(self.sectchars[node.cmdname] * hl)
- self.write()
-
- def visit_EnvironmentNode(self, node):
- self.flush_par()
- envname = node.envname
- if envname == 'notice':
- type = text(node.args[0]) or 'note'
- self.write_directive(type, '', node.content)
- elif envname in ('seealso', 'seealso*'):
- self.write_directive('seealso', '', node.content, spabove=True)
- elif envname == 'abstract':
- self.write_directive('topic', 'Abstract', node.content, spabove=True)
- elif envname == 'quote':
- with self.indented():
- self.visit_node(node.content)
- self.write()
- elif envname == 'quotation':
- self.write_directive('epigraph', '', node.content, spabove=True)
- else:
- raise WriterError('no handler for %s environment' % envname)
-
- descmap = {
- 'funcdesc': ('function', '0(1)'),
- 'funcdescni': ('function', '0(1)'),
- 'classdesc': ('class', '0(1)'),
- 'classdesc*': ('class', '0'),
- 'methoddesc': ('method', '0.1(2)'),
- 'methoddescni': ('method', '0.1(2)'),
- 'excdesc': ('exception', '0'),
- 'excclassdesc': ('exception', '0(1)'),
- 'datadesc': ('data', '0'),
- 'datadescni': ('data', '0'),
- 'memberdesc': ('attribute', '0.1'),
- 'memberdescni': ('attribute', '0.1'),
- 'opcodedesc': ('opcode', '0 (1)'),
-
- 'cfuncdesc': ('cfunction', '0 1(2)'),
- 'cmemberdesc': ('cmember', '1 0.2'),
- 'csimplemacrodesc': ('cmacro', '0'),
- 'ctypedesc': ('ctype', '1'),
- 'cvardesc': ('cvar', '0 1'),
- }
-
- def _write_sig(self, spec, args):
- # don't escape "*" in signatures
- self.noescape += 1
- for c in spec:
- if c.isdigit():
- self.visit_node(self.get_textonly_node(args[int(c)]))
- else:
- self.curpar.append(c)
- self.noescape -= 1
-
- def visit_DescEnvironmentNode(self, node):
- envname = node.envname
- if envname not in self.descmap:
- raise WriterError('no handler for %s environment' % envname)
-
- self.flush_par()
- # automatically fill in the class name if not given
- if envname[:9] == 'classdesc' or envname[:12] == 'excclassdesc':
- self.thisclass = text(node.args[0])
- elif envname[:10] in ('methoddesc', 'memberdesc') and not \
- text(node.args[0]):
- if not self.thisclass:
- raise WriterError('No current class for %s member' %
- text(node.args[1]))
- node.args[0] = TextNode(self.thisclass)
- directivename, sigspec = self.descmap[envname]
- self._write_sig(sigspec, node.args)
- signature = self.get_par(wrap=False)
- self.write()
- self.write('.. %s:: %s' % (directivename, signature))
- if node.additional:
- for cmdname, add in node.additional:
- entry = self.descmap[cmdname.replace('line', 'desc')]
- if envname[:10] in ('methoddesc', 'memberdesc') and not \
- text(add[0]):
- if not self.thisclass:
- raise WriterError('No current class for %s member' %
- text(add[1]))
- add[0] = TextNode(self.thisclass)
- self._write_sig(entry[1], add)
- signature = self.get_par(wrap=False)
- self.write(' %s%s' % (' ' * (len(directivename) - 2),
- signature))
- if envname.endswith('ni'):
- self.write(' :noindex:')
- self.write()
- with self.indented():
- self.visit_node(node.content)
-
-
- def visit_CommandNode(self, node):
- cmdname = node.cmdname
- if cmdname == 'label':
- labelname = self.labelprefix + text(node.args[0]).lower()
- if self.no_flushing:
- # in section
- self.sectionlabel = labelname
- else:
- self.flush_par()
- self.write('.. _%s:\n' % labelname)
- return
-
- elif cmdname in ('declaremodule', 'modulesynopsis',
- 'moduleauthor', 'sectionauthor', 'platform'):
- self.flush_par(nocb=True, nocomments=True)
- if not self.sectionmeta:
- self.sectionmeta = SectionMeta()
- if cmdname == 'declaremodule':
- self.sectionmeta.modname = text(node.args[2])
- elif cmdname == 'modulesynopsis':
- self.sectionmeta.synopsis = self.get_node_text(
- self.get_textonly_node(node.args[0], warn=0), wrap=True)
- elif cmdname == 'moduleauthor':
- email = text(node.args[1])
- self.sectionmeta.modauthors.append(
- '%s%s' % (text(node.args[0]), (email and ' <%s>' % email)))
- elif cmdname == 'sectionauthor':
- email = text(node.args[1])
- self.sectionmeta.sectauthors.append(
- '%s%s' % (text(node.args[0]), (email and ' <%s>' % email)))
- elif cmdname == 'platform':
- self.sectionmeta.platform = text(node.args[0])
- self.flush_cb = lambda: self.write_sectionmeta()
- return
-
- self.flush_par()
- if cmdname.startswith('see'):
- i = 2
- if cmdname == 'seemodule':
- self.write('Module :mod:`%s`' % text(node.args[1]))
- elif cmdname == 'seelink':
- linktext = self.get_node_text(node.args[1])
- self.write('`%s <%s>`_' % (linktext, text(node.args[0])))
- elif cmdname == 'seepep':
- self.write(':pep:`%s` - %s' % (text(node.args[0]),
- self.get_node_text(node.args[1])))
- elif cmdname == 'seerfc':
- self.write(':rfc:`%s` - %s' % (text(node.args[0]),
- text(node.args[1])))
- elif cmdname == 'seetitle':
- if empty(node.args[0]):
- self.write('%s' % text(node.args[1]))
- else:
- self.write('`%s <%s>`_' % (text(node.args[1]),
- text(node.args[0])))
- elif cmdname == 'seeurl':
- i = 1
- self.write('%s' % text(node.args[0]))
- elif cmdname == 'seetext':
- self.visit_node(node.args[0])
- return
- with self.indented():
- self.visit_node(node.args[i])
- elif cmdname in ('versionchanged', 'versionadded'):
- self.write('.. %s:: %s' % (cmdname, text(node.args[1])))
- if not empty(node.args[0]):
- with self.indented():
- self.visit_node(node.args[0])
- self.curpar.append('.')
- else:
- self.write()
- elif cmdname == 'deprecated':
- self.write_directive('deprecated', text(node.args[0]), node.args[1],
- spbelow=False)
- elif cmdname == 'localmoduletable':
- if self.toctree is not None:
- self.write_directive('toctree', '', spbelow=True, spabove=True)
- with self.indented():
- for entry in self.toctree:
- self.write(entry + '.rst')
- else:
- self.warnings.append('no toctree given, but \\localmoduletable in file')
- elif cmdname == 'verbatiminput':
- inclname = text(node.args[0])
- newname = includes_mapping.get(inclname, '../includes/' + inclname)
- if newname is None:
- self.write()
- self.write('.. XXX includefile %s' % inclname)
- return
- self.write()
- self.write('.. include:: %s' % newname)
- self.write(' :literal:')
- self.write()
- elif cmdname == 'input':
- inclname = text(node.args[0])
- newname = includes_mapping.get(inclname, None)
- if newname is None:
- self.write('X' 'XX: input{%s} :XX' 'X' % inclname)
- return
- self.write_directive('include', newname, spabove=True)
- elif cmdname == 'centerline':
- self.write_directive('centered', self.get_node_text(node.args[0]),
- spabove=True, spbelow=True)
- elif cmdname == 'XX' 'X':
- self.visit_wrapped(r'**\*\*** ', node.args[0], ' **\*\***')
- else:
- raise WriterError('no handler for %s command' % cmdname)
-
- def visit_DescLineCommandNode(self, node):
- # these have already been written as arguments of the corresponding
- # DescEnvironmentNode
- pass
-
- def visit_ParaSepNode(self, node):
- self.flush_par()
-
- def visit_VerbatimNode(self, node):
- if self.comments:
- # these interfer with the literal block
- self.flush_par()
- if self.curpar:
- last = self.curpar[-1].rstrip(' ')
- if last.endswith(':'):
- self.curpar[-1] = last + ':'
- else:
- self.curpar.append(' ::')
- else:
- self.curpar.append('::')
- self.flush_par()
- with self.indented():
- if isinstance(node.content, TextNode):
- # verbatim
- lines = textwrap.dedent(text(node.content).lstrip('\n')).split('\n')
- if not lines:
- return
- else:
- # alltt, possibly with inline formats
- lines = self.get_node_text(self.get_textonly_node(
- node.content, warn=0)).split('\n') + ['']
- # discard leading blank links
- while not lines[0].strip():
- del lines[0]
- for line in lines:
- self.write(line)
-
- note_re = re.compile('^\(\d\)$')
-
- def visit_TableNode(self, node):
- self.flush_par()
- lines = node.lines[:]
- lines.insert(0, node.headings)
- fmted_rows = []
- width = WIDTH - len(self.indentation)
- realwidths = [0] * node.numcols
- colwidth = (width / node.numcols) + 5
- # don't allow paragraphs in table cells for now
- with self.noflush:
- for line in lines:
- cells = []
- for i, cell in enumerate(line):
- par = self.get_node_text(cell, wrap=True, width=colwidth)
- if len(par) == 1 and self.note_re.match(par[0].strip()):
- # special case: escape "(1)" to avoid enumeration
- par[0] = '\\' + par[0]
- maxwidth = max(map(len, par)) if par else 0
- realwidths[i] = max(realwidths[i], maxwidth)
- cells.append(par)
- fmted_rows.append(cells)
-
- def writesep(char='-'):
- out = ['+']
- for width in realwidths:
- out.append(char * (width+2))
- out.append('+')
- self.write(''.join(out))
-
- def writerow(row):
- lines = map(None, *row)
- for line in lines:
- out = ['|']
- for i, cell in enumerate(line):
- if cell:
- out.append(' ' + cell.ljust(realwidths[i]+1))
- else:
- out.append(' ' * (realwidths[i] + 2))
- out.append('|')
- self.write(''.join(out))
-
- writesep('-')
- writerow(fmted_rows[0])
- writesep('=')
- for row in fmted_rows[1:]:
- writerow(row)
- writesep('-')
- self.write()
-
- def visit_ItemizeNode(self, node):
- self.flush_par()
- for title, content in node.items:
- if not empty(title):
- # do it like in a description list
- self.write(self.get_node_text(title))
- with self.indented():
- self.visit_node(content)
- else:
- self.curpar.append('* ')
- with self.indented(2, firstline=False):
- self.visit_node(content)
-
- def visit_EnumerateNode(self, node):
- self.flush_par()
- for title, content in node.items:
- assert empty(title)
- self.curpar.append('#. ')
- with self.indented(3, firstline=False):
- self.visit_node(content)
-
- def visit_DescriptionNode(self, node):
- self.flush_par()
- for title, content in node.items:
- self.write(self.get_node_text(title))
- with self.indented():
- self.visit_node(content)
-
- visit_DefinitionsNode = visit_DescriptionNode
-
- def visit_ProductionListNode(self, node):
- self.flush_par()
- arg = text(node.arg)
- self.write('.. productionlist::%s' % (' '+arg if arg else ''))
- with self.indented():
- for item in node.items:
- if not empty(item[0]):
- lasttext = text(item[0])
- self.write('%s: %s' % (
- text(item[0]).ljust(len(lasttext)),
- self.get_node_text(item[1])))
- self.write()
-
- def visit_EmptyNode(self, node):
- pass
-
- def visit_TextNode(self, node):
- if self.noescape:
- self.curpar.append(node.text)
- else:
- self.curpar.append(fixup_text(node.text))
-
- visit_NbspNode = visit_TextNode
- visit_SimpleCmdNode = visit_TextNode
-
- def visit_BreakNode(self, node):
- # XXX: linebreaks in ReST?
- self.curpar.append(' --- ')
-
- def visit_IndexNode(self, node):
- if node.cmdname == 'withsubitem':
- self.indexsubitem = ' ' + text(node.indexargs[0])
- self.visit_node(node.indexargs[1])
- self.indexsubitem = ''
- else:
- self.indexentries.append((node.cmdname, node.indexargs,
- self.indexsubitem))
-
- # maps argumentless commands to text
- simplecmd_mapping = {
- 'NULL': '*NULL*',
- 'shortversion': '|version|',
- 'version': '|release|',
- 'today': '|today|',
- }
-
- # map LaTeX command names to roles: shorter names!
- role_mapping = {
- 'cfunction': 'cfunc',
- 'constant': 'const',
- 'csimplemacro': 'cmacro',
- 'exception': 'exc',
- 'function': 'func',
- 'grammartoken': 'token',
- 'member': 'attr',
- 'method': 'meth',
- 'module': 'mod',
- 'programopt': 'option',
- 'filenq': 'file',
- # these mean: no change
- 'cdata': '',
- 'class': '',
- 'command': '',
- 'ctype': '',
- 'data': '', # NEW
- 'dfn': '',
- 'envvar': '',
- 'file': '',
- 'guilabel': '',
- 'kbd': '',
- 'keyword': '',
- 'mailheader': '',
- 'makevar': '',
- 'menuselection': '',
- 'mimetype': '',
- 'newsgroup': '',
- 'option': '',
- 'pep': '',
- 'program': '',
- 'ref': '',
- 'rfc': '',
- }
-
- # do not warn about nested inline markup in these roles
- role_no_warn = set((
- 'cdata', 'cfunction', 'class', 'constant', 'csimplemacro', 'ctype',
- 'data', 'exception', 'function', 'member', 'method', 'module',
- ))
-
- def visit_InlineNode(self, node):
- # XXX: no nested markup -- docutils doesn't support it
- cmdname = node.cmdname
- if not node.args:
- self.curpar.append(self.simplecmd_mapping[cmdname])
- return
- content = node.args[0]
- if cmdname in ('code', 'bfcode', 'samp', 'texttt', 'regexp'):
- self.visit_wrapped('``', self.get_textonly_node(content, 'code',
- warn=1), '``', noescape=True)
- elif cmdname in ('emph', 'textit', 'var'):
- self.visit_wrapped('*', self.get_textonly_node(content, 'emph',
- warn=1), '*')
- elif cmdname in ('strong', 'textbf'):
- self.visit_wrapped('**', self.get_textonly_node(content, 'strong',
- warn=1), '**')
- elif cmdname in ('b', 'textrm', 'email'):
- self.visit_node(content)
- elif cmdname == 'token':
- # \token appears in productionlists only
- self.visit_wrapped('`', self.get_textonly_node(content, 'var',
- warn=1), '`')
- elif cmdname == 'ref':
- self.curpar.append(':ref:`%s%s`' % (self.labelprefix,
- text(node.args[0]).lower()))
- elif cmdname == 'refmodule':
- self.visit_wrapped(':mod:`', node.args[1], '`', noescape=True)
- elif cmdname == 'optional':
- self.visit_wrapped('[', content, ']')
- elif cmdname == 'url':
- self.visit_node(content)
- elif cmdname == 'ulink':
- target = text(node.args[1])
- if target.startswith('..'):
- self.visit_wrapped('', content, ' (X' + 'XX reference: %s)' % target)
- elif not target.startswith(('http:', 'mailto:')):
- #self.warnings.append('Local \\ulink to %s, use \\ref instead' % target)
- self.visit_wrapped('', content, ' (X' 'XX reference: %s)' % target)
- else:
- self.visit_wrapped('`', self.get_textonly_node(content, 'ulink', warn=1),
- ' <%s>`_' % target)
- elif cmdname == 'citetitle':
- target = text(content)
- if not target:
- self.visit_node(node.args[1])
- elif target.startswith('..'):
- self.visit_wrapped('', node.args[1],
- ' (X' + 'XX reference: %s)' % target)
- else:
- self.visit_wrapped('`', self.get_textonly_node(node.args[1],
- 'citetitle', warn=1),
- ' <%s>`_' % target)
- elif cmdname == 'character':
- # ``'a'`` is not longer than :character:`a`
- self.visit_wrapped("``'", content, "'``", noescape=True)
- elif cmdname == 'manpage':
- self.curpar.append(':manpage:`')
- self.visit_node(self.get_textonly_node(content, warn=0))
- self.visit_wrapped('(', self.get_textonly_node(node.args[1], warn=0), ')')
- self.curpar.append('`')
- elif cmdname == 'footnote':
- self.curpar.append(' [#]_')
- self.footnotes.append(content)
- elif cmdname == 'frac':
- self.visit_wrapped('(', node.args[0], ')/')
- self.visit_wrapped('(', node.args[1], ')')
- elif cmdname == 'longprogramopt':
- self.visit_wrapped(':option:`--', content, '`')
- elif cmdname == 'filevar':
- self.visit_wrapped(':file:`{', content, '}`')
- elif cmdname == '':
- self.visit_node(content)
- # stray commands from distutils
- elif cmdname in ('argument name', 'value', 'attribute', 'option name'):
- self.visit_wrapped('*', content, '*')
- else:
- self.visit_wrapped(':%s:`' % (self.role_mapping[cmdname] or cmdname),
- self.get_textonly_node(
- content, cmdname, warn=(cmdname not in self.role_no_warn)), '`')
diff --git a/converter/scanner.py b/converter/scanner.py
deleted file mode 100644
index 53502d2c..00000000
--- a/converter/scanner.py
+++ /dev/null
@@ -1,97 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
- scanner
- ~~~~~~~
-
- This library implements a regex based scanner.
-
- :copyright: 2006-2007 by Armin Ronacher, Georg Brandl.
- :license: BSD license.
-"""
-import re
-
-
-class EndOfText(RuntimeError):
- """
- Raise if end of text is reached and the user
- tried to call a match function.
- """
-
-
-class Scanner(object):
- """
- Simple scanner
-
- All method patterns are regular expression strings (not
- compiled expressions!)
- """
-
- def __init__(self, text, flags=0):
- """
- :param text: The text which should be scanned
- :param flags: default regular expression flags
- """
- self.data = text
- self.data_length = len(text)
- self.start_pos = 0
- self.pos = 0
- self.flags = flags
- self.last = None
- self.match = None
- self._re_cache = {}
-
- def eos(self):
- """`True` if the scanner reached the end of text."""
- return self.pos >= self.data_length
- eos = property(eos, eos.__doc__)
-
- def check(self, pattern):
- """
- Apply `pattern` on the current position and return
- the match object. (Doesn't touch pos). Use this for
- lookahead.
- """
- if self.eos:
- raise EndOfText()
- if pattern not in self._re_cache:
- self._re_cache[pattern] = re.compile(pattern, self.flags)
- return self._re_cache[pattern].match(self.data, self.pos)
-
- def test(self, pattern):
- """Apply a pattern on the current position and check
- if it patches. Doesn't touch pos."""
- return self.check(pattern) is not None
-
- def scan(self, pattern):
- """
- Scan the text for the given pattern and update pos/match
- and related fields. The return value is a boolen that
- indicates if the pattern matched. The matched value is
- stored on the instance as ``match``, the last value is
- stored as ``last``. ``start_pos`` is the position of the
- pointer before the pattern was matched, ``pos`` is the
- end position.
- """
- if self.eos:
- raise EndOfText()
- if pattern not in self._re_cache:
- self._re_cache[pattern] = re.compile(pattern, self.flags)
- self.last = self.match
- m = self._re_cache[pattern].match(self.data, self.pos)
- if m is None:
- return False
- self.start_pos = m.start()
- self.pos = m.end()
- self.match = m
- return True
-
- def get_char(self):
- """Scan exactly one char."""
- self.scan('.')
-
- def __repr__(self):
- return '<%s %d/%d>' % (
- self.__class__.__name__,
- self.pos,
- self.data_length
- )
diff --git a/converter/tokenizer.py b/converter/tokenizer.py
deleted file mode 100644
index 61960919..00000000
--- a/converter/tokenizer.py
+++ /dev/null
@@ -1,124 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
- Python documentation LaTeX file tokenizer
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- For more documentation, look into the ``restwriter.py`` file.
-
- :copyright: 2007-2008 by Georg Brandl.
- :license: BSD.
-"""
-
-import re
-
-from .scanner import Scanner
-
-class Tokenizer(Scanner):
- """ Lex a Python doc LaTeX document. """
-
- specials = {
- '{': 'bgroup',
- '}': 'egroup',
- '[': 'boptional',
- ']': 'eoptional',
- '~': 'tilde',
- '$': 'mathmode',
- }
-
- @property
- def mtext(self):
- return self.match.group()
-
- def tokenize(self):
- return TokenStream(self._tokenize())
-
- def _tokenize(self):
- lineno = 1
- while not self.eos:
- if self.scan(r'\\verb([^a-zA-Z])(.*?)(\1)'):
- # specialcase \verb here
- yield lineno, 'command', 'verb', '\\verb'
- yield lineno, 'text', self.match.group(1), self.match.group(1)
- yield lineno, 'text', self.match.group(2), self.match.group(2)
- yield lineno, 'text', self.match.group(3), self.match.group(3)
- elif self.scan(r'\\([a-zA-Z]+\*?)[ \t]*'):
- yield lineno, 'command', self.match.group(1), self.mtext
- elif self.scan(r'\\.'):
- yield lineno, 'command', self.mtext[1], self.mtext
- elif self.scan(r'\\\n'):
- yield lineno, 'text', self.mtext, self.mtext
- lineno += 1
- elif self.scan(r'%(.*)\n[ \t]*'):
- yield lineno, 'comment', self.match.group(1), self.mtext
- lineno += 1
- elif self.scan(r'[{}\[\]~$]'):
- yield lineno, self.specials[self.mtext], self.mtext, self.mtext
- elif self.scan(r'(\n[ \t]*){2,}'):
- lines = self.mtext.count('\n')
- yield lineno, 'parasep', '\n' * lines, self.mtext
- lineno += lines
- elif self.scan(r'\n[ \t]*'):
- yield lineno, 'text', ' ', self.mtext
- lineno += 1
- elif self.scan(r'[^\\%}{\[\]~\n]+'):
- yield lineno, 'text', self.mtext, self.mtext
- else:
- raise RuntimeError('unexpected text on line %d: %r' %
- (lineno, self.data[self.pos:self.pos+100]))
-
-
-class TokenStream(object):
- """
- A token stream works like a normal generator just that
- it supports peeking and pushing tokens back to the stream.
- """
-
- def __init__(self, generator):
- self._generator = generator
- self._pushed = []
- self.last = (1, 'initial', '')
-
- def __iter__(self):
- return self
-
- def __nonzero__(self):
- """ Are we at the end of the tokenstream? """
- if self._pushed:
- return True
- try:
- self.push(self.next())
- except StopIteration:
- return False
- return True
-
- def pop(self):
- """ Return the next token from the stream. """
- if self._pushed:
- rv = self._pushed.pop()
- else:
- rv = self._generator.next()
- self.last = rv
- return rv
-
- next = pop
-
- def popmany(self, num=1):
- """ Pop a list of tokens. """
- return [self.next() for i in range(num)]
-
- def peek(self):
- """ Pop and push a token, return it. """
- token = self.next()
- self.push(token)
- return token
-
- def peekmany(self, num=1):
- """ Pop and push a list of tokens. """
- tokens = self.popmany(num)
- for tok in tokens:
- self.push(tok)
- return tokens
-
- def push(self, item):
- """ Push a token back to the stream. """
- self._pushed.append(item)
diff --git a/converter/util.py b/converter/util.py
deleted file mode 100644
index 7b7cc4bb..00000000
--- a/converter/util.py
+++ /dev/null
@@ -1,100 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
- Python documentation conversion utils
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- :copyright: 2007-2008 by Georg Brandl.
- :license: BSD.
-"""
-
-import re
-
-from docutils.nodes import make_id
-
-from .docnodes import TextNode, EmptyNode, NodeList
-
-
-def umlaut(cmd, c):
- try:
- if cmd == '"':
- return {'o': u'ö',
- 'a': u'ä',
- 'u': u'ü',
- 'i': u'ï',
- 'O': u'Ö',
- 'A': u'Ä',
- 'U': u'Ü'}[c]
- elif cmd == "'":
- return {'a': u'á',
- 'e': u'é'}[c]
- elif cmd == '~':
- return {'n': u'ñ'}[c]
- elif cmd == 'c':
- return {'c': u'ç'}[c]
- elif cmd == '`':
- return {'o': u'ò'}[c]
- else:
- from .latexparser import ParserError
- raise ParserError('invalid umlaut \\%s' % cmd, 0)
- except KeyError:
- from .latexparser import ParserError
- raise ParserError('unsupported umlaut \\%s%s' % (cmd, c), 0)
-
-def fixup_text(text):
- return text.replace('``', '"').replace("''", '"').replace('`', "'").\
- replace('|', '\\|').replace('*', '\\*')
-
-def empty(node):
- return (type(node) is EmptyNode)
-
-def text(node):
- """ Return the text for a TextNode or raise an error. """
- if isinstance(node, TextNode):
- return node.text
- elif isinstance(node, NodeList):
- restext = ''
- for subnode in node:
- restext += text(subnode)
- return restext
- from .restwriter import WriterError
- raise WriterError('text() failed for %r' % node)
-
-markup_re = re.compile(r'(:[a-zA-Z0-9_-]+:)?`(.*?)`')
-
-def my_make_id(name):
- """ Like make_id(), but strip roles first. """
- return make_id(markup_re.sub(r'\2', name))
-
-alphanum = u'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
-wordchars_s = alphanum + u'_.-'
-wordchars_e = alphanum + u'+`(-'
-bad_markup_re = re.compile(r'(:[a-zA-Z0-9_-]+:)?(`{1,2})[ ]*(.+?)[ ]*(\2)')
-quoted_code_re = re.compile(r'\\`(``.+?``)\'')
-paren_re = re.compile(r':(func|meth|cfunc):`(.*?)\(\)`')
-
-def repair_bad_inline_markup(text):
- # remove quoting from `\code{x}'
- xtext = quoted_code_re.sub(r'\1', text)
-
- # special: the literal backslash
- xtext = xtext.replace('``\\``', '\x03')
- # special: literal backquotes
- xtext = xtext.replace('``````', '\x02')
-
- # remove () from function markup
- xtext = paren_re.sub(r':\1:`\2`', xtext)
-
- ntext = []
- lasti = 0
- l = len(xtext)
- for m in bad_markup_re.finditer(xtext):
- ntext.append(xtext[lasti:m.start()])
- s, e = m.start(), m.end()
- if s != 0 and xtext[s-1:s] in wordchars_s:
- ntext.append('\\ ')
- ntext.append((m.group(1) or '') + m.group(2) + m.group(3) + m.group(4))
- if e != l and xtext[e:e+1] in wordchars_e:
- ntext.append('\\ ')
- lasti = m.end()
- ntext.append(xtext[lasti:])
- return ''.join(ntext).replace('\x02', '``````').replace('\x03', '``\\``')