#!/usr/bin/env python """ Naive DocBook to asciidoc translatiion. """ import re, sys header412 = r'''<\?xml version="1.0" encoding="ISO-8859-1"\?> ''' refentry = """ [^>]* ([^>]*) [^>]* ([^>]*) ([^>]*) """ adocentry = r"""= \2(\1) = :doctype: manpage == NAME == \2 - \3 """ transforms = ( (header412, ""), (refentry, adocentry), ("", ""), ("", ""), ("", "_"), ("", "_"), ("", "*"), ("", "*"), ("", "\""), ("", "\""), ("", ""), ("", ""), ("", ""), ("", ""), ("", "<"), ("", ">"), ("", "+"), ("", "+"), ("—", "--"), # Maybe not the right thing? # Section markup ("([^>]*)", r'== \1 =='), ("([^>]*)", r'[[\1]]\n== \2 =='), ("", ""), ("([^>]*)", r'=== \1 ==='), ("([^>]*)", r'[[\1]]\n=== \2 ==='), ("", ""), ("([^>]*)", r'=== \1 ==='), ("([^>]*)", r'[[\1]]\n==== \2 ===='), ("", ""), ("([^>]*)", r'== \1 =='), ("([^>]*)", r'[[\1]]\n== \2 =='), ("", ""), ("([^>]*)", r'=== \1 ==='), ("([^>]*)", r'[[\1]]\n=== \2 ==='), ("", ""), ("([^>]*)", r'=== \1 ==='), ("([^>]*)", r'[[\1]]\n==== \2 ===='), ("", ""), ("\n", "// end"), ("\n", "// end"), # Miscellanea ("<", "<"), (">", ">"), ("'", "'"), ("", "---"), (" ", "---"), ("", "---"), ("", "---"), ("([^>]*)([^>]*)", r"\1(\2)"), ("]*>", "---"), ("", "---"), ("\n", ""), ("\n", ""), ("\n", ""), ("\n", ""), ("\n", ""), ("([^>]*)", r"\1::"), ("([^>]*)", r"[\1]"), ) xml = re.compile("<.*>|&.*;") def dedoc(inpath, outpath): contents = open(inpath).read() for (source, target) in compiled_transforms: contents = source.sub(target, contents) open(outpath, "w").write(contents) #for (n, text) in enumerate(open(outpath).readlines()): # if xml.searc(text): # sys.stderr.write("%s:%d: %s" % (outpath, n+1, text)) if __name__ == "__main__": compiled_transforms = [(re.compile(f), t) for (f, t) in transforms] if len(sys.argv) == 1: dedoc("/dev/stdin", "/dev/stdout") else: for fn in sys.argv[1:]: dedoc(fn, fn)