|
Packit |
58578d |
# Copyright David Abrahams 2004. Distributed under the Boost
|
|
Packit |
58578d |
# Software License, Version 1.0. (See accompanying
|
|
Packit |
58578d |
# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
Packit |
58578d |
|
|
Packit |
58578d |
# Support for docutils ReStructuredText processing.
|
|
Packit |
58578d |
|
|
Packit |
58578d |
import type ;
|
|
Packit |
58578d |
import scanner ;
|
|
Packit |
58578d |
import generators ;
|
|
Packit |
58578d |
import os ;
|
|
Packit |
58578d |
import common ;
|
|
Packit |
58578d |
import toolset ;
|
|
Packit |
58578d |
import path ;
|
|
Packit |
58578d |
import feature : feature ;
|
|
Packit |
58578d |
import property ;
|
|
Packit |
58578d |
import errors ;
|
|
Packit |
58578d |
|
|
Packit |
58578d |
.initialized = ;
|
|
Packit |
58578d |
|
|
Packit |
58578d |
type.register ReST : rst ;
|
|
Packit |
58578d |
|
|
Packit |
58578d |
class rst-scanner : common-scanner
|
|
Packit |
58578d |
{
|
|
Packit |
58578d |
rule __init__ ( paths * )
|
|
Packit |
58578d |
{
|
|
Packit |
58578d |
common-scanner.__init__ . $(paths) ;
|
|
Packit |
58578d |
}
|
|
Packit |
58578d |
|
|
Packit |
58578d |
rule pattern ( )
|
|
Packit |
58578d |
{
|
|
Packit |
58578d |
return "^[ ]*\\.\\.[ ]+include::[ ]+([^
|
|
Packit |
58578d |
]+)"
|
|
Packit |
58578d |
"^[ ]*\\.\\.[ ]+image::[ ]+([^
|
|
Packit |
58578d |
]+)"
|
|
Packit |
58578d |
"^[ ]*\\.\\.[ ]+figure::[ ]+([^
|
|
Packit |
58578d |
]+)"
|
|
Packit |
58578d |
;
|
|
Packit |
58578d |
}
|
|
Packit |
58578d |
}
|
|
Packit |
58578d |
|
|
Packit |
58578d |
scanner.register rst-scanner : include ;
|
|
Packit |
58578d |
type.set-scanner ReST : rst-scanner ;
|
|
Packit |
58578d |
|
|
Packit |
58578d |
generators.register-standard docutils.html : ReST : HTML ;
|
|
Packit |
58578d |
|
|
Packit |
58578d |
rule init ( docutils-dir ? : tools-dir ? )
|
|
Packit |
58578d |
{
|
|
Packit |
58578d |
docutils-dir ?= [ modules.peek : DOCUTILS_DIR ] ;
|
|
Packit |
58578d |
tools-dir ?= $(docutils-dir)/tools ;
|
|
Packit |
58578d |
|
|
Packit |
58578d |
if ! $(.initialized)
|
|
Packit |
58578d |
{
|
|
Packit |
58578d |
.initialized = true ;
|
|
Packit |
58578d |
if $(docutils-dir)
|
|
Packit |
58578d |
{
|
|
Packit |
58578d |
.docutils-dir = $(docutils-dir) ;
|
|
Packit |
58578d |
.tools-dir = $(tools-dir:R="") ;
|
|
Packit |
58578d |
|
|
Packit |
58578d |
.setup = [
|
|
Packit |
58578d |
common.prepend-path-variable-command PYTHONPATH
|
|
Packit |
58578d |
: $(.docutils-dir) $(.docutils-dir)/extras ] ;
|
|
Packit |
58578d |
RST2XXX = [ common.find-tool rst2html ] ;
|
|
Packit |
58578d |
}
|
|
Packit |
58578d |
else
|
|
Packit |
58578d |
{
|
|
Packit |
58578d |
RST2XXX_PY = [ common.find-tool rst2html.py ] ;
|
|
Packit |
58578d |
}
|
|
Packit |
58578d |
}
|
|
Packit |
58578d |
}
|
|
Packit |
58578d |
|
|
Packit |
58578d |
rule html ( target : source : properties * )
|
|
Packit |
58578d |
{
|
|
Packit |
58578d |
if ! [ on $(target) return $(RST2XXX) ]
|
|
Packit |
58578d |
{
|
|
Packit |
58578d |
local python-cmd = [ property.select <python.interpreter> : $(properties) ] ;
|
|
Packit |
58578d |
if ! $(.tools-dir) && ! $(RST2XXX_PY) {
|
|
Packit |
58578d |
errors.user-error
|
|
Packit |
58578d |
"The docutils module is used, but not configured. "
|
|
Packit |
58578d |
: ""
|
|
Packit |
58578d |
: "Please modify your user-config.jam or project-config.jam to contain:"
|
|
Packit |
58578d |
: ""
|
|
Packit |
58578d |
: " using docutils : <docutils-dir> ;"
|
|
Packit |
58578d |
: ""
|
|
Packit |
58578d |
: "On Ubuntu, 'docutils-common' package will create /usr/share/docutils."
|
|
Packit |
58578d |
: "Other flavours of Linux likely have docutils as package as well."
|
|
Packit |
58578d |
: "On Windows, you can install from http://docutils.sourceforge.net/."
|
|
Packit |
58578d |
;
|
|
Packit |
58578d |
}
|
|
Packit |
58578d |
|
|
Packit |
58578d |
if $(RST2XXX_PY)
|
|
Packit |
58578d |
{
|
|
Packit |
58578d |
if $(RST2XXX_PY:D)
|
|
Packit |
58578d |
{
|
|
Packit |
58578d |
# If we have a path to the rst2html.py script, we need to use
|
|
Packit |
58578d |
# the python interpreter to load it up.
|
|
Packit |
58578d |
RST2XXX on $(target) = $(python-cmd:G=:E="python") $(RST2XXX_PY) ;
|
|
Packit |
58578d |
}
|
|
Packit |
58578d |
else
|
|
Packit |
58578d |
{
|
|
Packit |
58578d |
# Otherwise, bare rst2html.py, we can just exec that directly.
|
|
Packit |
58578d |
# This work for both Nix, and the standard Windows Python installs.
|
|
Packit |
58578d |
RST2XXX on $(target) = $(RST2XXX_PY) ;
|
|
Packit |
58578d |
}
|
|
Packit |
58578d |
}
|
|
Packit |
58578d |
else
|
|
Packit |
58578d |
{
|
|
Packit |
58578d |
RST2XXX on $(target) = $(python-cmd:G=:E="python") $(.tools-dir)/rst2html.py ;
|
|
Packit |
58578d |
}
|
|
Packit |
58578d |
}
|
|
Packit |
58578d |
}
|
|
Packit |
58578d |
|
|
Packit |
58578d |
|
|
Packit |
58578d |
feature docutils : : free ;
|
|
Packit |
58578d |
feature docutils-html : : free ;
|
|
Packit |
58578d |
feature docutils-cmd : : free ;
|
|
Packit |
58578d |
toolset.flags docutils COMMON-FLAGS : <docutils> ;
|
|
Packit |
58578d |
toolset.flags docutils HTML-FLAGS : <docutils-html> ;
|
|
Packit |
58578d |
toolset.flags docutils RST2XXX : <docutils-cmd> ;
|
|
Packit |
58578d |
|
|
Packit |
58578d |
actions html
|
|
Packit |
58578d |
{
|
|
Packit |
58578d |
$(.setup)
|
|
Packit |
58578d |
"$(RST2XXX)" $(COMMON-FLAGS) $(HTML-FLAGS) $(>) $(<)
|
|
Packit |
58578d |
}
|
|
Packit |
58578d |
|