diff options
Diffstat (limited to 'DocBook/SCons/FO.py')
-rw-r--r-- | DocBook/SCons/FO.py | 45 |
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 |