summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'DocBook/SCons/FO.py')
-rw-r--r--DocBook/SCons/FO.py45
1 files changed, 45 insertions, 0 deletions
diff --git a/DocBook/SCons/FO.py b/DocBook/SCons/FO.py
new file mode 100644
index 0000000..c7596d6
--- /dev/null
+++ b/DocBook/SCons/FO.py
@@ -0,0 +1,45 @@
+import SCons.Util
+import xml.dom.minidom, re
+
+################################################################################
+# XSL-FO builder
+################################################################################
+
+def generate(env) :
+ def generate_actions(source, target, env, for_signature) :
+ if len(env["FOCFG"]) > 0 :
+ cmd = "$FO -c $FOCFG $FOFLAGS $SOURCE $TARGET"
+ else :
+ cmd = "$FO $FOFLAGS $SOURCE $TARGET"
+ return SCons.Action.Action(cmd, cmdstr = "$FOCOMSTR")
+
+ def modify_sources(target, source, env) :
+ if len(env["FOCFG"]) > 0 :
+ source.append(env["FOCFG"])
+ return target, source
+
+ def scan_fo(node, env, path) :
+ dependencies = set()
+ try :
+ document = xml.dom.minidom.parseString(node.get_contents())
+ except xml.parsers.expat.ExpatError:
+ return []
+ for include in document.getElementsByTagNameNS("http://www.w3.org/1999/XSL/Format", "external-graphic") :
+ m = re.match("url\((.*)\)", include.getAttribute("src"))
+ if m :
+ dependencies.add(m.group(1))
+ return list(dependencies)
+
+ env["FO"] = "fop"
+ env["FOFLAGS"] = ""
+ env["FOCFG"] = ""
+ env["BUILDERS"]["FO"] = SCons.Builder.Builder(
+ generator = generate_actions,
+ emitter = modify_sources,
+ source_scanner = SCons.Scanner.Scanner(function = scan_fo, skeys = [".fo"]),
+ suffix = ".pdf",
+ src_suffix = ".fo"
+ )
+
+def exists(env) :
+ return True