#!/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)