Ticket #6495: invbuilder.patch

File invbuilder.patch, 24.2 KB (added by hivert, 7 years ago)

inventory builder + merge todo list & html / js indexes

  • doc/common/builder.py

    # HG changeset patch
    # User Florent Hivert <Florent.Hivert@univ-rouen.fr>
    # Date 1336086919 -7200
    # Node ID f1dcd8941f31a50d27b1e7e3d0235ddfbbbbe596
    # Parent  aba936e6bf948cc9eb0f6316e36c0c8d3cb249b6
    Add a builder for generating object.inv and pickle files.
    
    diff --git a/doc/common/builder.py b/doc/common/builder.py
    a b def build_ref_doc(doc, lang, format, out 
    112112##########################################
    113113#             Builders                   #
    114114##########################################
     115
    115116def builder_helper(type):
    116117    """
    117118    Returns a function which builds the documentation for
    class DocBuilder(object): 
    171172            sage: b._output_dir('html')
    172173            '.../devel/sage/doc/output/html/en/tutorial'
    173174        """
     175        if type == "inventory": # put inventories in the html tree
     176            type = "html"
    174177        return mkdir(os.path.join(SAGE_DOC, "output", type, self.lang, self.name))
    175178
    176179    def _doctrees_dir(self):
    class DocBuilder(object): 
    197200            sage: import os, sys; sys.path.append(os.environ['SAGE_DOC']+'/common/'); import builder
    198201            sage: b = builder.DocBuilder('tutorial')
    199202            sage: b._output_formats()
    200             ['changes', 'html', 'htmlhelp', 'json', 'latex', 'linkcheck', 'pickle', 'web']
     203            ['changes', 'html', 'htmlhelp', 'inventory', 'json', 'latex', 'linkcheck', 'pickle', 'web']
    201204
    202205        """
    203206        #Go through all the attributes of self and check to
    class DocBuilder(object): 
    249252    latex = builder_helper('latex')
    250253    changes = builder_helper('changes')
    251254    linkcheck = builder_helper('linkcheck')
    252 
     255    # import the customized builder for object.inv files
     256    inventory = builder_helper('inventory')
    253257
    254258class AllBuilder(object):
    255259    """
    class AllBuilder(object): 
    273277        docs = self.get_all_documents()
    274278        refs = [x for x in docs if x.endswith('reference')]
    275279        others = [x for x in docs if not x.endswith('reference')]
    276         for document in others:
    277             logger.warning("\nBuilding %s.\n" % document)
    278             getattr(get_builder(document), name)(*args, **kwds)
    279         # Build the reference manual twice to resolve references.
    280         # That is, build once to construct the intersphinx inventory
    281         # files, and then build the second time for real.  So the
    282         # first build should be as fast as possible; thus do an html
    283         # build first.
     280        # Build the reference manual twice to resolve references.  That is,
     281        # build once with the inventory builder to construct the intersphinx
     282        # inventory files, and then build the second time for real.  So the
     283        # first build should be as fast as possible;
    284284        logger.warning("\nBuilding reference manual, first pass.\n")
    285285        global ALLSPHINXOPTS
    286286        ALLSPHINXOPTS += ' -Q '
    287287        for document in refs:
    288             getattr(get_builder(document), 'html')(*args, **kwds)
     288            getattr(get_builder(document), 'inventory')(*args, **kwds)
    289289        logger.warning("Building reference manual, second pass.\n")
    290290        ALLSPHINXOPTS = ALLSPHINXOPTS.replace('-Q', '-q') + ' -a '
    291291        for document in refs:
    292292            getattr(get_builder(document), name)(*args, **kwds)
     293        # build the other documents
     294        for document in others:
     295            logger.warning("\nBuilding %s.\n" % document)
     296            getattr(get_builder(document), name)(*args, **kwds)
    293297
    294298    def get_all_documents(self):
    295299        """
    class ReferenceBuilder(AllBuilder): 
    387391            sage: b._output_dir('html')
    388392            '.../devel/sage/doc/output/html/en/reference'
    389393        """
     394        if type == "inventory": # put inventories in the html tree
     395            type = "html"
    390396        return mkdir(os.path.join(SAGE_DOC, "output", type, lang, self.name))
    391397
    392398    def _wrapper(self, format, *args, **kwds):
    class ReferenceBuilder(AllBuilder): 
    412418                                  os.path.split(output_dir)[0]) + args, kwds)
    413419            pool.close()
    414420            pool.join()
    415             if format == 'html':
    416                 # html build: combine the todo lists from the
    417                 # different modules.
    418                 todofile = os.path.join(output_dir, 'todolist', 'index.html')
    419                 old = open(todofile).read()
    420                 note = "The combined to do list is only available in the html version of the reference manual."
    421                 preamble = old.find(note)
    422                 postamble = preamble + len(note)
    423                 if preamble != -1:
    424                     old_todofile = os.path.join(output_dir, 'todolist', 'index-old.html')
    425                     shutil.move(todofile, old_todofile)
    426                     new = open(todofile, 'w')
    427                     new.write(old[:preamble])
    428                     for f in os.listdir(output_dir):
    429                         index = os.path.join(output_dir, f, 'index.html')
    430                         if (f != 'todolist' and os.path.exists(index)):
    431                             html = open(index).read()
    432                             start = html.find('<div class="admonition-todo')
    433                             end = html.find('<div class="section" id="indices-and-tables">')
    434                             if start != -1:
    435                                 html = html[start:end].replace('sage/%s' %f,
    436                                                                '../%s/sage/%s' % (f, f))
    437                                 new.write(html)
    438                     new.write(old[postamble:])
    439                     new.close()
    440 
    441                 logger.warning('''
    442 Build finished.  The Sage reference manual can be found in
    443 
    444   %s
    445 ''' % (os.path.join(output_dir, 'index.html')))
    446421            # PDF: we need to build master index file which lists all
    447422            # of the PDF file.  So we create an html file, based on
    448423            # the file index.html from the "website" target.
    class ReferenceSubBuilder(DocBuilder): 
    853828
    854829            sage: import os, sys; sys.path.append(os.environ['SAGE_DOC']+'/common/'); import builder
    855830            sage: import builder
    856             sage: builder.ReferenceBuilder("reference").auto_rest_filename("sage.combinat.partition")
     831            sage: builder.ReferenceSubBuilder("reference").auto_rest_filename("sage.combinat.partition")
    857832            '.../devel/sage/doc/en/reference/sage/combinat/partition.rst'
    858833        """
    859834        return self.dir + os.path.sep + module_name.replace('.',os.path.sep) + '.rst'
  • doc/common/conf.py

    diff --git a/doc/common/conf.py b/doc/common/conf.py
    a b sys.path.append(get_doc_abspath('common' 
    1919
    2020# Add any Sphinx extension module names here, as strings. They can be extensions
    2121# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
    22 extensions = ['sage_autodoc',  'sphinx.ext.graphviz',
     22extensions = ['inventory_builder', 'merge_index',
     23              'sage_autodoc',  'sphinx.ext.graphviz',
    2324              'sphinx.ext.inheritance_diagram', 'sphinx.ext.todo',
    2425              'sphinx.ext.extlinks']
    2526# We do *not* fully initialize intersphinx since we call it by hand
    if 'SAGE_DOC_JSMATH' in os.environ: 
    206207# If false, no module index is generated.
    207208#html_use_modindex = True
    208209
     210# A list of prefixes that are ignored for sorting the Python module index ( if
     211# this is set to ['foo.'], then foo.bar is shown under B, not F). Works only
     212# for the HTML builder currently.
     213modindex_common_prefix = ['sage.']
     214
    209215# If false, no index is generated.
    210216#html_use_index = True
    211217
  • new file doc/common/inventory_builder.py

    diff --git a/doc/common/inventory_builder.py b/doc/common/inventory_builder.py
    new file mode 100644
    - +  
     1# -*- coding: utf-8 -*-
     2"""
     3    inventory builder
     4    ~~~~~~~~~~~~~~~~~
     5
     6    A customized HTML builder which only generate intersphinx "object.inv"
     7    inventory files and pickle files. The documentation files are not writen.
     8"""
     9from sphinx.builders.html import StandaloneHTMLBuilder
     10from sphinx.util.console import bold
     11
     12class InventoryBuilder(StandaloneHTMLBuilder):
     13    """
     14    A customized HTML builder which only generate intersphinx "object.inv"
     15    inventory files and pickle files. The documentation files are not writen.
     16    """
     17    name = "inventory"
     18
     19    def write_doc(self, docname, doctree):
     20        """
     21        Don't write any doc
     22        """
     23
     24    def finish(self):
     25        """
     26        Only write the inventory files.
     27        """
     28        self.write_buildinfo()
     29        self.dump_inventory()
     30
     31    def removed_method_error(self):
     32        """
     33        Raise an error if this method is called.
     34
     35        This is just for making sure that some writer methods are indeed
     36        deactivated.
     37        """
     38        raise RuntimeError, "This function souldn't be called in \"%s\" builder"%(self.name)
     39
     40    copy_image_files = removed_method_error
     41    copy_download_files = removed_method_error
     42    copy_static_files = removed_method_error
     43    handle_finish = removed_method_error
     44
     45def setup(app):
     46    app.add_builder(InventoryBuilder)
     47
  • new file doc/common/merge_index.py

    diff --git a/doc/common/merge_index.py b/doc/common/merge_index.py
    new file mode 100644
    - +  
     1# -*- coding: utf-8 -*-
     2"""
     3    merge the index of several sphinx doctrees
     4    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     5
     6"""
     7import cPickle, os, sys
     8import sphinx
     9from sphinx.util.console import bold
     10
     11
     12def get_docs(app):
     13    """
     14    Get the list of Sage's sub-docs
     15    """
     16    # return ['reference/logic']
     17    # TODO: devise a method to get the list more properly
     18    sys.path.append(os.environ['SAGE_DOC']+'/common/')
     19    import builder
     20    b = builder.ReferenceBuilder('reference')
     21    return b.get_all_documents(app.env.srcdir)
     22
     23def merge_environment(app, env):
     24    """
     25    Merges the following attributes of the sub-docs environment into the main
     26    environment:
     27    - todo_all_todos              # ToDo's
     28    - indexentries                # global python index
     29    - all_docs                    # needed by the js index
     30    - domaindata['py']['modules'] # list of python modules
     31    """
     32    app.info(bold('Merging environment/index files...'))
     33    for cursub in get_docs(app):
     34        curdoc = cursub[10:] # strip "reference/"
     35        app.info("    %s:"%curdoc, nonl=1)
     36        docenv = get_env(app, curdoc)
     37        if docenv is not None:
     38            fixpath = lambda path: os.path.join(curdoc, path)
     39            app.info(" %s todo entries, %s index entries"%(
     40                    len(docenv.todo_all_todos), len(docenv.indexentries)),
     41                     nonl=1)
     42
     43            # fix the todo links
     44            for dct in docenv.todo_all_todos:
     45                dct['docname']=fixpath(dct['docname'])
     46            env.todo_all_todos += docenv.todo_all_todos
     47            # fix the html index links
     48            newindex = {}
     49            for ind in docenv.indexentries:
     50                if ind.startswith('sage/'):
     51                    newind = fixpath(ind)
     52                    newindex[newind] = docenv.indexentries[ind]
     53                else:
     54                    newindex[ind] = docenv.indexentries[ind]
     55            env.indexentries.update(newindex)
     56            # fix the all_docs links
     57            newalldoc = {}
     58            for ind in docenv.all_docs:
     59                newalldoc[fixpath(ind)]=docenv.all_docs[ind]
     60            env.all_docs.update(newalldoc)
     61            # fix the module index
     62            newmodules = {}
     63            for ind,(modpath,v1,v2,v3) in (
     64                docenv.domaindata['py']['modules'].iteritems()):
     65                newmodules[ind] = (fixpath(modpath),v1,v2,v3)
     66            env.domaindata['py']['modules'].update(newmodules)
     67            app.info(", %s modules"%(len(newmodules)))
     68    app.info('... done (%s todo entries, %s index entries, %s modules)'%(
     69            len(env.todo_all_todos),
     70            len(env.indexentries),
     71            len(env.domaindata['py']['modules'])))
     72
     73def get_env(app, curdoc):
     74    """
     75    Get the environement of a sub-doc from the pickle
     76    """
     77    from sphinx.application import ENV_PICKLE_FILENAME
     78    filename = os.path.join(
     79        app.env.doctreedir, curdoc, ENV_PICKLE_FILENAME)
     80    try:
     81        f = open(filename, 'rb')
     82    except IOError:
     83        app.info("")
     84        app.warn("Unable to fetch %s "%filename)
     85        return None
     86    docenv = cPickle.load(f)
     87    f.close()
     88    return docenv
     89
     90def merge_js_index(app):
     91    """
     92    Merge the JS indexes of the sub-docs into the main JS index
     93    """
     94    app.info('')
     95    app.info(bold('Merging js index files...'))
     96    for cursub in get_docs(app):
     97        curdoc = cursub[10:] # strip "reference/"
     98        app.info("    %s:"%curdoc, nonl=1)
     99        fixpath = lambda path: os.path.join(curdoc, path)
     100        index = get_js_index(app, curdoc)
     101        if index is not None:
     102            # merge the mappings
     103            mapping = app.builder.indexer._mapping
     104            app.info(" %s js index entries"%(len(index._mapping)))
     105            for (ref, locs) in index._mapping.iteritems():
     106                newmapping = set(map(fixpath, locs))
     107                if ref in mapping:
     108                    newmapping = mapping[ref] | newmapping
     109                mapping[unicode(ref)] = newmapping
     110            # merge the titles
     111            titles = app.builder.indexer._titles
     112            for (res, title) in index._titles.iteritems():
     113                titles[fixpath(res)] = title
     114            # TODO: merge indexer._objtypes, indexer._objnames as well
     115
     116            # Setup source symbolic links
     117            dest = os.path.join(app.outdir, "_sources", curdoc)
     118            if not os.path.exists(dest):
     119                os.symlink(os.path.join("..", curdoc, "_sources"), dest)
     120    app.info('... done (%s js index entries)'%(len(mapping)))
     121    app.info(bold('Writing js search indexes...'), nonl=1)
     122    return [] # no extra page to setup
     123
     124def get_js_index(app, curdoc):
     125    """
     126    Get the JS index of a sub-doc from the file
     127    """
     128    from sphinx.search import IndexBuilder, languages
     129    # FIXME: find the correct lang
     130    indexer = IndexBuilder(app.env, 'en',
     131                           app.config.html_search_options)
     132    indexfile = os.path.join(app.outdir, curdoc, 'searchindex.js')
     133    try:
     134        f = open(indexfile, 'rb')
     135    except IOError:
     136        app.info("")
     137        app.warn("Unable to fetch %s "%indexfile)
     138        return None
     139    indexer.load(f, sphinx.search.js_index)
     140    f.close()
     141    return indexer
     142
     143
     144mustbefixed = ['search', 'genindex', 'genindex-all'
     145               'py-modindex', 'searchindex.js']
     146def fix_path_html(app, pagename, templatename, ctx, event_arg):
     147    """
     148    Fixes the context so that the files
     149    - search.html
     150    - genindex.html
     151    - py-modindex.html
     152    points to the right place, that is in
     153        reference/
     154    instead of
     155        reference/subdocument
     156    """
     157    # sphinx/builder/html.py line 702
     158    # def pathto(otheruri, resource=False,
     159    #            baseuri=self.get_target_uri(pagename)):
     160    old_pathto = ctx['pathto']
     161    def sage_pathto(otheruri, *args, **opts):
     162        if otheruri in mustbefixed:
     163            otheruri = os.path.join("..", otheruri)
     164        return old_pathto(otheruri, *args, **opts)
     165    ctx['pathto'] = sage_pathto
     166
     167
     168def setup(app):
     169    if app.srcdir.endswith('reference'):
     170        # compiling the refman
     171        app.connect('env-updated', merge_environment)
     172        app.connect('html-collect-pages', merge_js_index)
     173    else:
     174        # compiling a sub doc
     175        app.connect('html-page-context', fix_path_html)
     176
  • doc/en/reference/conf.py

    diff --git a/doc/en/reference/conf.py b/doc/en/reference/conf.py
    a b exclude_trees = exclude_trees + [ 
    120120    'semirings',
    121121    'stats',
    122122    'structure',
    123     'tensor',
    124     'todolist'
     123    'tensor'
    125124    ]
  • doc/en/reference/footer.txt

    diff --git a/doc/en/reference/footer.txt b/doc/en/reference/footer.txt
    a b  
    1 
    2 .. todolist::
    3 
    41Indices and Tables
    52==================
    63
    7 .. toctree::
    8    :maxdepth: 1
    9 
    10 * :ref:`genindex`
    11 * :ref:`modindex`
    12 * :ref:`search`
     4* `Index <../genindex.html>`_
     5* `Module Index <../py-modindex.html>`_
     6* `Search Page <../search.html>`_
  • doc/en/reference/index.rst

    diff --git a/doc/en/reference/index.rst b/doc/en/reference/index.rst
    a b Enjoy Sage! 
    3434Table of Contents
    3535=================
    3636
    37    * `The Sage Command Line <cmd/index.html>`_
    38    * `The Sage Notebook <notebook/index.html>`_
    39  
     37* `The Sage Command Line <cmd/index.html>`_
     38* `The Sage Notebook <notebook/index.html>`_
     39
    4040Calculus, Plotting
    4141------------------
    42  
    43    * `Symbolic Calculus <calculus/index.html>`_
    44    * `Constants <constants/index.html>`_
    45    * `Functions <functions/index.html>`_
    46    * `2D Graphics <plotting/index.html>`_
    47    * `3D Graphics <plot3d/index.html>`_
    48  
     42
     43* `Symbolic Calculus <calculus/index.html>`_
     44* `Constants <constants/index.html>`_
     45* `Functions <functions/index.html>`_
     46* `2D Graphics <plotting/index.html>`_
     47* `3D Graphics <plot3d/index.html>`_
     48
    4949Combinatorics, Discrete Mathematics
    5050-----------------------------------
    51  
    52    * `Combinatorics <combinat/index.html>`_
    53    * `Graph Theory <graphs/index.html>`_
    54  
     51
     52* `Combinatorics <combinat/index.html>`_
     53* `Graph Theory <graphs/index.html>`_
     54
    5555Structures, Coercion, Categories
    5656--------------------------------
    5757
    58    * `Basic Structures <structure/index.html>`_
    59    * `Coercion <coercion/index.html>`_
    60    * `Category Theory and Categories <categories/index.html>`_
     58* `Basic Structures <structure/index.html>`_
     59* `Coercion <coercion/index.html>`_
     60* `Category Theory and Categories <categories/index.html>`_
    6161
    6262Rings, Fields, Algebras
    6363-----------------------
    6464
    65    * `General Rings, Ideals, and Morphisms <rings/index.html>`_
    66    * `Standard Commutative Rings <rings_standard/index.html>`_
    67    * `Fixed and Arbitrary Precision Numerical Fields <rings_numerical/index.html>`_
    68    * `Algebraic Number Fields <number_fields/index.html>`_
    69    * `Function Fields <function_fields/index.html>`_
    70    * `p-Adics <padics/index.html>`_
    71    * `Polynomial Rings <polynomial_rings/index.html>`_
    72    * `Power Series Rings <power_series/index.html>`_
    73    * `Standard Semirings <semirings/index.html>`_
    74    * `Algebras <algebras/index.html>`_
    75    * `Quaternion Algebras <quat_algebras/index.html>`_
     65* `General Rings, Ideals, and Morphisms <rings/index.html>`_
     66* `Standard Commutative Rings <rings_standard/index.html>`_
     67* `Fixed and Arbitrary Precision Numerical Fields <rings_numerical/index.html>`_
     68* `Algebraic Number Fields <number_fields/index.html>`_
     69* `Function Fields <function_fields/index.html>`_
     70* `p-Adics <padics/index.html>`_
     71* `Polynomial Rings <polynomial_rings/index.html>`_
     72* `Power Series Rings <power_series/index.html>`_
     73* `Standard Semirings <semirings/index.html>`_
     74* `Algebras <algebras/index.html>`_
     75* `Quaternion Algebras <quat_algebras/index.html>`_
    7676
    7777Groups, Monoids, Matrices, Modules
    7878----------------------------------
    7979
    80    * `Groups <groups/index.html>`_
    81    * `Monoids <monoids/index.html>`_
    82    * `Matrices and Spaces of Matrices <matrices/index.html>`_
    83    * `Modules <modules/index.html>`_
     80* `Groups <groups/index.html>`_
     81* `Monoids <monoids/index.html>`_
     82* `Matrices and Spaces of Matrices <matrices/index.html>`_
     83* `Modules <modules/index.html>`_
    8484
    8585Geometry and Topology
    8686---------------------
    8787
    88    * `Combinatorial Geometry <geometry/index.html>`_
    89    * `Cell Complexes and their Homology <homology/index.html>`_
    90    * `Differential Forms <tensor/index.html>`_
     88* `Combinatorial Geometry <geometry/index.html>`_
     89* `Cell Complexes and their Homology <homology/index.html>`_
     90* `Differential Forms <tensor/index.html>`_
    9191
    9292Number Theory, Algebraic Geometry
    9393---------------------------------
    9494
    95    * `Quadratic Forms <quadratic_forms/index.html>`_
    96    * `L-Functions <lfunctions/index.html>`_
    97    * `Schemes <schemes/index.html>`_
    98    * `Elliptic, Plane, and Hyperelliptic Curves <plane_curves/index.html>`_
    99    * `Arithmetic Subgroups of SL_2(Z) <arithgroup/index.html>`_
    100    * `General Hecke Algebras and Hecke Modules <hecke/index.html>`_
    101    * `Modular Symbols <modsym/index.html>`_
    102    * `Modular Forms <modfrm/index.html>`_
    103    * `Modular Abelian Varieties <modabvar/index.html>`_
    104    * `Miscellaneous Modular-Form-Related Modules <modmisc/index.html>`_
     95* `Quadratic Forms <quadratic_forms/index.html>`_
     96* `L-Functions <lfunctions/index.html>`_
     97* `Schemes <schemes/index.html>`_
     98* `Elliptic, Plane, and Hyperelliptic Curves <plane_curves/index.html>`_
     99* `Arithmetic Subgroups of SL_2(Z) <arithgroup/index.html>`_
     100* `General Hecke Algebras and Hecke Modules <hecke/index.html>`_
     101* `Modular Symbols <modsym/index.html>`_
     102* `Modular Forms <modfrm/index.html>`_
     103* `Modular Abelian Varieties <modabvar/index.html>`_
     104* `Miscellaneous Modular-Form-Related Modules <modmisc/index.html>`_
    105105
    106106Miscellaneous Mathematics
    107107-------------------------
    108108
    109    * `Games <games/index.html>`_
    110    * `Symbolic Logic <logic/index.html>`_
    111    * `Cryptography <cryptography/index.html>`_
    112    * `Numerical Optimization <numerical/index.html>`_
    113    * `Probability <probability/index.html>`_
    114    * `Statistics <stats/index.html>`_
    115    * `Quantitative Finance <finance/index.html>`_
    116    * `Coding Theory <coding/index.html>`_
     109* `Games <games/index.html>`_
     110* `Symbolic Logic <logic/index.html>`_
     111* `Cryptography <cryptography/index.html>`_
     112* `Numerical Optimization <numerical/index.html>`_
     113* `Probability <probability/index.html>`_
     114* `Statistics <stats/index.html>`_
     115* `Quantitative Finance <finance/index.html>`_
     116* `Coding Theory <coding/index.html>`_
    117117
    118118Interfaces, Databases, Miscellany
    119119---------------------------------
    120120
    121    * `Interpreter Interfaces <interfaces/index.html>`_
    122    * `C/C++ Library Interfaces <libs/index.html>`_
    123    * `Databases <databases/index.html>`_
    124    * `Parallel Computing <parallel/index.html>`_
    125    * `Miscellaneous <misc/index.html>`_
     121* `Interpreter Interfaces <interfaces/index.html>`_
     122* `C/C++ Library Interfaces <libs/index.html>`_
     123* `Databases <databases/index.html>`_
     124* `Parallel Computing <parallel/index.html>`_
     125* `Miscellaneous <misc/index.html>`_
    126126
    127127Other
    128128-----
    129129
    130    * `Sage's To Do List <todolist/index.html>`_
    131    * `History and License <history_and_license/index.html>`_
     130.. toctree::
     131   :maxdepth: 2
    132132
    133 .. include:: footer.txt
     133   todolist
     134
     135* `History and License <history_and_license/index.html>`_
     136
     137Indices and Tables
     138------------------
     139
     140* :ref:`genindex`
     141* :ref:`modindex`
     142* :ref:`search`
  • new file doc/en/reference/todolist.rst

    diff --git a/doc/en/reference/todolist.rst b/doc/en/reference/todolist.rst
    new file mode 100644
    - +  
     1SAGE's To Do list
     2=================
     3
     4There is still some work to do :-) :
     5
     6.. warning::
     7
     8    This list is currently very incomplete as most doctests do not use the
     9    ``.. todo::`` markup.
     10
     11    .. todo::
     12
     13        Rewrite the hand-written TODOs by using the correct ``.. todo::``
     14        markup.
     15
     16The combined to do list is only available in the html version of the reference manual.
     17
     18.. todolist::
  • deleted file doc/en/reference/todolist/conf.py

    diff --git a/doc/en/reference/todolist/conf.py b/doc/en/reference/todolist/conf.py
    deleted file mode 100644
    + -  
    1 # -*- coding: utf-8 -*-
    2 # This file is execfile()d with the current directory set to its
    3 # containing dir.
    4 #
    5 # The contents of this file are pickled, so don't put values in the
    6 # namespace that aren't pickleable (module imports are okay, they're
    7 # removed automatically).
    8 #
    9 # All configuration values have a default; values that are commented
    10 # out serve to show the default.
    11 
    12 # See the parent directory's conf_sub module for details.
    13 import sys
    14 sys.path.append('..')
    15 from conf_sub import *
  • deleted file doc/en/reference/todolist/index.rst

    diff --git a/doc/en/reference/todolist/index.rst b/doc/en/reference/todolist/index.rst
    deleted file mode 100644
    + -  
    1 SAGE's To Do list
    2 =================
    3 
    4 There is still some work to do :-) :
    5 
    6 .. warning::
    7 
    8     This list is currently very incomplete as most doctests do not use the
    9     ``.. todo::`` markup.
    10 
    11     .. todo::
    12 
    13         Rewrite the hand-written TODOs by using the correct ``.. todo::``
    14         markup.
    15 
    16 The combined to do list is only available in the html version of the reference manual.
    17 
    18 .. todolist::