Add a CMakeLists.txt which provides the 'manual' target for building the Sphinx documentation. This may require you to set the SPHINXBUILD_EXECUTABLE CMake variable to the sphinx-build executable
Change the file extension to 'rst' rather than 'txt' to avoid clashes with CMakeLists.txt and to help syntax highlighting. Add the doxylink Sphinx extension from sphinx-contrib to provide Doxygen links.
This commit is contained in:
parent
1ecb14104d
commit
5e62a35f42
@ -53,6 +53,7 @@ ELSE()
|
|||||||
SET(BUILD_AND_BUNDLE_DOCS NO)
|
SET(BUILD_AND_BUNDLE_DOCS NO)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
|
ADD_SUBDIRECTORY(documentation)
|
||||||
|
|
||||||
# Option summary
|
# Option summary
|
||||||
MESSAGE(STATUS "")
|
MESSAGE(STATUS "")
|
||||||
|
12
documentation/CMakeLists.txt
Normal file
12
documentation/CMakeLists.txt
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
find_program(SPHINXBUILD_EXECUTABLE sphinx-build DOC "The location of the sphinx-build executable")
|
||||||
|
|
||||||
|
if(SPHINXBUILD_EXECUTABLE AND QT_QCOLLECTIONGENERATOR_EXECUTABLE)
|
||||||
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/conf.in.py ${CMAKE_CURRENT_BINARY_DIR}/conf.py @ONLY)
|
||||||
|
#Generates the HTML docs and the Qt help file which can be opened with "assistant -collectionFile thermite.qhc"
|
||||||
|
#add_custom_target(manual ${SPHINXBUILD_EXECUTABLE} -b qthelp ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} COMMAND ${QT_QCOLLECTIONGENERATOR_EXECUTABLE} polyvox.qhcp -o polyvox.qhc)
|
||||||
|
add_custom_target(manual
|
||||||
|
${SPHINXBUILD_EXECUTABLE} -b html
|
||||||
|
-c ${CMAKE_CURRENT_BINARY_DIR} #Load the conf.py from the binary dir
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}
|
||||||
|
)
|
||||||
|
endif()
|
28
documentation/_extensions/sphinxcontrib/LICENSE
Normal file
28
documentation/_extensions/sphinxcontrib/LICENSE
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
If not otherwise noted, the extensions in this package are licensed
|
||||||
|
under the following license.
|
||||||
|
|
||||||
|
Copyright (c) 2010 Matt Williams.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are
|
||||||
|
met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
14
documentation/_extensions/sphinxcontrib/__init__.py
Normal file
14
documentation/_extensions/sphinxcontrib/__init__.py
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""
|
||||||
|
sphinxcontrib
|
||||||
|
~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
This package is a namespace package that contains all extensions
|
||||||
|
distributed in the ``sphinx-contrib`` distribution.
|
||||||
|
|
||||||
|
:copyright: Copyright 2007-2009 by the Sphinx team, see AUTHORS.
|
||||||
|
:license: BSD, see LICENSE for details.
|
||||||
|
"""
|
||||||
|
|
||||||
|
__import__('pkg_resources').declare_namespace(__name__)
|
||||||
|
|
148
documentation/_extensions/sphinxcontrib/doxylink.py
Normal file
148
documentation/_extensions/sphinxcontrib/doxylink.py
Normal file
@ -0,0 +1,148 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""
|
||||||
|
doxylink
|
||||||
|
~~~~~~~~
|
||||||
|
|
||||||
|
Sphinx extension to link to external Doxygen API documentation.
|
||||||
|
|
||||||
|
It works much like the extlinks extension but it does some more processing to link C++ symbols against their Doxygen HTML documentation.
|
||||||
|
|
||||||
|
.. confval:: doxylink
|
||||||
|
|
||||||
|
The environment is set up with a dictionary mapping the interpereted text role
|
||||||
|
to a tuple of tag file and prefix:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
doxylink = {
|
||||||
|
'polyvox' : ('/home/matt/PolyVox.tag', '/home/matt/PolyVox/html/'),
|
||||||
|
'qtogre' : ('/home/matt/QtOgre.tag', '/home/matt/QtOgre/html/'),
|
||||||
|
}
|
||||||
|
|
||||||
|
This allows one to do:
|
||||||
|
|
||||||
|
.. code-block:: rst
|
||||||
|
|
||||||
|
:polyvox:`Array <PolyVox::Array>`.
|
||||||
|
:polyvox:`PolyVox::Volume`
|
||||||
|
:qtogre:`QtOgre::Log`
|
||||||
|
:polyvox:`tidyUpMemeory(int) <tidyUpMemory>`
|
||||||
|
:polyvox:`PolyVox::Array::operator[]`
|
||||||
|
|
||||||
|
:requires: Python 2.5
|
||||||
|
|
||||||
|
.. todo::
|
||||||
|
|
||||||
|
Make the extension atuomatically re-run if the tag file is altered on disc
|
||||||
|
|
||||||
|
Find a way to parse the tag file to a DOM tree *once* and then just reference it from then on.
|
||||||
|
|
||||||
|
:copyright: Copyright 2010 by Matt Williams
|
||||||
|
:license: BSD, see LICENSE for details.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from docutils import nodes, utils
|
||||||
|
|
||||||
|
from sphinx.util.nodes import split_explicit_title
|
||||||
|
|
||||||
|
import xml.etree.ElementTree as ET
|
||||||
|
|
||||||
|
def find_url(doc, symbol):
|
||||||
|
"""
|
||||||
|
Return the URL for a given symbol.
|
||||||
|
|
||||||
|
This is where the magic happens.
|
||||||
|
This function could be a lot more clever. At present it required the passed symbol to be almost exactly the same as the entries in the Doxygen tag file.
|
||||||
|
|
||||||
|
.. todo::
|
||||||
|
|
||||||
|
Maybe print a list of all possible matches as a warning (but still only return the first)
|
||||||
|
|
||||||
|
:Parameters:
|
||||||
|
doc : xml.etree.ElementTree
|
||||||
|
The XML DOM object
|
||||||
|
symbol : string
|
||||||
|
The symbol to lookup in the file. E.g. something like 'PolyVox::Array' or 'tidyUpMemory'
|
||||||
|
|
||||||
|
:return: String representing the filename part of the URL
|
||||||
|
"""
|
||||||
|
|
||||||
|
#First check for an exact match with a top-level object (namespaces, objects etc.)
|
||||||
|
|
||||||
|
#env = inliner.document.settings.env
|
||||||
|
|
||||||
|
matches = []
|
||||||
|
for compound in doc.findall('.//compound'):
|
||||||
|
if compound.find('name').text == symbol:
|
||||||
|
matches += [compound.find('filename').text]
|
||||||
|
|
||||||
|
if len(matches) > 1:
|
||||||
|
pass
|
||||||
|
#env.warn(env.docname, 'There were multiple matches for `%s`: %s' % (symbol, matches))
|
||||||
|
if len(matches) == 1:
|
||||||
|
return matches[0]
|
||||||
|
|
||||||
|
|
||||||
|
#Strip off first namespace bit of the compound name so that 'ArraySizes' can match 'PolyVox::ArraySizes'
|
||||||
|
for compound in doc.findall('.//compound'):
|
||||||
|
symbol_list = compound.find('name').text.split('::', 1)
|
||||||
|
if len(symbol_list) == 2:
|
||||||
|
reducedsymbol = symbol_list[1]
|
||||||
|
if reducedsymbol == symbol:
|
||||||
|
return compound.find('filename').text
|
||||||
|
|
||||||
|
#Now split the symbol by '::'. Find an exact match for the first part and then a member match for the second
|
||||||
|
#So PolyVox::Array::operator[] becomes like {namespace: "PolyVox::Array", endsymbol: "operator[]"}
|
||||||
|
symbol_list = symbol.rsplit('::', 1)
|
||||||
|
if len(symbol_list) == 2:
|
||||||
|
namespace = symbol_list[0]
|
||||||
|
endsymbol = symbol_list[1]
|
||||||
|
for compound in doc.findall('.//compound'):
|
||||||
|
if compound.find('name').text == namespace:
|
||||||
|
for member in compound.findall('member'):
|
||||||
|
# #If this compound object contains the matching member then return it
|
||||||
|
if member.find('name').text == endsymbol:
|
||||||
|
return member.find('anchorfile').text + '#' + member.find('anchor').text
|
||||||
|
|
||||||
|
#Then we'll look at unqualified members
|
||||||
|
for member in doc.findall('.//member'):
|
||||||
|
if member.find('name').text == symbol:
|
||||||
|
return member.find('anchorfile').text + '#' + member.find('anchor').text
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
|
def create_role(app, tag_filename, rootdir):
|
||||||
|
def find_doxygen_link(name, rawtext, text, lineno, inliner, options={}, content=[]):
|
||||||
|
text = utils.unescape(text)
|
||||||
|
# from :name:`title <part>`
|
||||||
|
has_explicit_title, title, part = split_explicit_title(text)
|
||||||
|
|
||||||
|
try:
|
||||||
|
tag_file = ET.parse(tag_filename)
|
||||||
|
except (IOError):
|
||||||
|
env = inliner.document.settings.env
|
||||||
|
env.warn(env.docname, 'Could not open %s' % tag_filename)
|
||||||
|
else:
|
||||||
|
url = find_url(tag_file, part)
|
||||||
|
if url:
|
||||||
|
full_url = rootdir + url
|
||||||
|
pnode = nodes.reference(title, title, internal=False, refuri=full_url)
|
||||||
|
return [pnode], []
|
||||||
|
#By here, no match was found
|
||||||
|
env = app.env
|
||||||
|
env.warn(env.docname, 'Could not find match for `%s` in `%s` tag file' % (part, tag_filename), lineno)
|
||||||
|
|
||||||
|
full_url="#"
|
||||||
|
#TODO find which command to use to just output it as plain text (no link) in this case
|
||||||
|
pnode = nodes.reference(title, title, internal=False, refuri=full_url)
|
||||||
|
return [pnode], []
|
||||||
|
|
||||||
|
return find_doxygen_link
|
||||||
|
|
||||||
|
def setup_doxylink_roles(app):
|
||||||
|
for name, [tag_filename, rootdir] in app.config.doxylink.iteritems():
|
||||||
|
app.add_role(name, create_role(app, tag_filename, rootdir))
|
||||||
|
|
||||||
|
def setup(app):
|
||||||
|
app.add_config_value('doxylink', {}, 'env')
|
||||||
|
app.connect('builder-inited', setup_doxylink_roles)
|
@ -1,7 +1,7 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
#
|
#
|
||||||
# PolyVox documentation build configuration file, created by
|
# PolyVox documentation build configuration file, created by
|
||||||
# sphinx-quickstart on Tue Jul 13 21:12:07 2010.
|
# sphinx-quickstart on Tue Jul 6 14:46:57 2010.
|
||||||
#
|
#
|
||||||
# This file is execfile()d with the current directory set to its containing dir.
|
# This file is execfile()d with the current directory set to its containing dir.
|
||||||
#
|
#
|
||||||
@ -16,7 +16,7 @@ import sys, os
|
|||||||
# If extensions (or modules to document with autodoc) are in another directory,
|
# If extensions (or modules to document with autodoc) are in another directory,
|
||||||
# add these directories to sys.path here. If the directory is relative to the
|
# add these directories to sys.path here. If the directory is relative to the
|
||||||
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
||||||
#sys.path.append(os.path.abspath('.'))
|
sys.path.append('@CMAKE_CURRENT_SOURCE_DIR@/_extensions')
|
||||||
|
|
||||||
# -- General configuration -----------------------------------------------------
|
# -- General configuration -----------------------------------------------------
|
||||||
|
|
||||||
@ -25,13 +25,13 @@ import sys, os
|
|||||||
|
|
||||||
# Add any Sphinx extension module names here, as strings. They can be extensions
|
# Add any Sphinx extension module names here, as strings. They can be extensions
|
||||||
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
|
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
|
||||||
extensions = []
|
extensions = ['sphinxcontrib.doxylink']
|
||||||
|
|
||||||
# Add any paths that contain templates here, relative to this directory.
|
# Add any paths that contain templates here, relative to this directory.
|
||||||
templates_path = ['_templates']
|
templates_path = ['@CMAKE_CURRENT_SOURCE_DIR@/_templates']
|
||||||
|
|
||||||
# The suffix of source filenames.
|
# The suffix of source filenames.
|
||||||
source_suffix = '.txt'
|
source_suffix = '.rst'
|
||||||
|
|
||||||
# The encoding of source files.
|
# The encoding of source files.
|
||||||
#source_encoding = 'utf-8-sig'
|
#source_encoding = 'utf-8-sig'
|
||||||
@ -41,16 +41,16 @@ master_doc = 'index'
|
|||||||
|
|
||||||
# General information about the project.
|
# General information about the project.
|
||||||
project = u'PolyVox'
|
project = u'PolyVox'
|
||||||
copyright = u'2010, David Williams Matt Williams'
|
copyright = u'2010, David Williams, Matt Williams'
|
||||||
|
|
||||||
# The version info for the project you're documenting, acts as replacement for
|
# The version info for the project you're documenting, acts as replacement for
|
||||||
# |version| and |release|, also used in various other places throughout the
|
# |version| and |release|, also used in various other places throughout the
|
||||||
# built documents.
|
# built documents.
|
||||||
#
|
#
|
||||||
# The short X.Y version.
|
# The short X.Y version.
|
||||||
version = '1.0'
|
version = '@POLYVOX_VERSION@'
|
||||||
# The full version, including alpha/beta/rc tags.
|
# The full version, including alpha/beta/rc tags.
|
||||||
release = '1.0'
|
release = '@POLYVOX_VERSION@'
|
||||||
|
|
||||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||||
# for a list of supported languages.
|
# for a list of supported languages.
|
||||||
@ -120,7 +120,7 @@ html_theme = 'default'
|
|||||||
# Add any paths that contain custom static files (such as style sheets) here,
|
# Add any paths that contain custom static files (such as style sheets) here,
|
||||||
# relative to this directory. They are copied after the builtin static files,
|
# relative to this directory. They are copied after the builtin static files,
|
||||||
# so a file named "default.css" will overwrite the builtin "default.css".
|
# so a file named "default.css" will overwrite the builtin "default.css".
|
||||||
html_static_path = ['_static']
|
html_static_path = ['@CMAKE_CURRENT_SOURCE_DIR@/_static']
|
||||||
|
|
||||||
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
|
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
|
||||||
# using the given strftime format.
|
# using the given strftime format.
|
||||||
@ -164,7 +164,7 @@ html_static_path = ['_static']
|
|||||||
#html_file_suffix = ''
|
#html_file_suffix = ''
|
||||||
|
|
||||||
# Output file base name for HTML help builder.
|
# Output file base name for HTML help builder.
|
||||||
htmlhelp_basename = 'PolyVoxdoc'
|
#htmlhelp_basename = 'PolyVoxdoc'
|
||||||
|
|
||||||
|
|
||||||
# -- Options for LaTeX output --------------------------------------------------
|
# -- Options for LaTeX output --------------------------------------------------
|
||||||
@ -179,7 +179,7 @@ htmlhelp_basename = 'PolyVoxdoc'
|
|||||||
# (source start file, target name, title, author, documentclass [howto/manual]).
|
# (source start file, target name, title, author, documentclass [howto/manual]).
|
||||||
latex_documents = [
|
latex_documents = [
|
||||||
('index', 'PolyVox.tex', u'PolyVox Documentation',
|
('index', 'PolyVox.tex', u'PolyVox Documentation',
|
||||||
u'David Williams Matt Williams', 'manual'),
|
u'David Williams, Matt Williams', 'manual'),
|
||||||
]
|
]
|
||||||
|
|
||||||
# The name of an image file (relative to this directory) to place at the top of
|
# The name of an image file (relative to this directory) to place at the top of
|
||||||
@ -212,5 +212,18 @@ latex_documents = [
|
|||||||
# (source start file, name, description, authors, manual section).
|
# (source start file, name, description, authors, manual section).
|
||||||
man_pages = [
|
man_pages = [
|
||||||
('index', 'polyvox', u'PolyVox Documentation',
|
('index', 'polyvox', u'PolyVox Documentation',
|
||||||
[u'David Williams Matt Williams'], 1)
|
[u'David Williams, Matt Williams'], 1)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
# Example configuration for intersphinx: refer to the Python standard library.
|
||||||
|
#intersphinx_mapping = {'http://docs.python.org/': None}
|
||||||
|
|
||||||
|
doxylink = {
|
||||||
|
'polyvox' : ('@CMAKE_CURRENT_BINARY_DIR@/../library/PolyVox.tag', '../library/doc/html/')
|
||||||
|
}
|
||||||
|
|
||||||
|
#This must be lowercase for QtHelp
|
||||||
|
qthelp_basename = "polyvox"
|
||||||
|
|
||||||
|
primary_domain = "c++"
|
Loading…
x
Reference in New Issue
Block a user