#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import sys, os, re

def warning (text):
    cmdname = os.path.basename(sys.argv[0])
    sys.stderr.write("%s: %s\n" % (cmdname, text))

# Read docbook from stdin.
dblines = sys.stdin.readlines()
entbase = "kappname"

# Insert entities for forms of application name into the docbook.
kepath = os.path.join(os.path.dirname(sys.argv[0]), "kappname-ents.tmp")
entlines = []
if os.path.isfile(kepath):
    entlines = open(kepath, "r").readlines()
appname_start_rx = re.compile(r"^\s*<!\s*ENTITY\s*%s\s*\"" % entbase)
appname_end_rx = re.compile(r"\"\s*>\s*$")
appname_start_lno = 0
appname_end_lno = 0
for i in range(len(dblines)):
    if not appname_start_lno:
        m = appname_start_rx.search(dblines[i])
        if m:
            appname_start_lno = i + 1
    if appname_start_lno:
        m = appname_end_rx.search(dblines[i])
        if m:
            appname_end_lno = i + 1
    if appname_start_lno and appname_end_lno:
        # If no outside entities were available, use original name
        # for all forms to prevent build failure.
        if not entlines:
            warning("no outside kappname entities available, "
                    "falling back to original application name");
            origname = m.group(1).strip()
            for suff in ("n", "g", "d", "a", "i", "l"):
                entline = "  <!ENTITY %s-%s '%s'>\n" % (entbase, suff, origname)
                entlines.append(entline)

        # Insert entity definitions.
        dblines[appname_start_lno - 1:appname_end_lno] = []
        di = 0
        for entline in entlines:
            dblines.insert(appname_start_lno - 1 + di, entline)
            di += 1

        break

# Pass modified docbook to stdout.
sys.stdout.writelines(dblines)
