]> git.donarmstrong.com Git - lilypond.git/blobdiff - buildscripts/texi-gettext.py
Move langdefs.py to python, and clean up doc building scripts
[lilypond.git] / buildscripts / texi-gettext.py
index 7dd751eca413993be0388e612bb79610b0b3eceb..8fbc2243b749b21a00a002e12b4243b3cea447d9 100644 (file)
@@ -1,58 +1,77 @@
 #!@PYTHON@
+# -*- coding: utf-8 -*-
 # texi-gettext.py
 
-# USAGE:  texi-gettext.py [-o OUTDIR] BUILDSCRIPT-DIR LOCALEDIR LANG FILES
+# USAGE:  texi-gettext.py [-o OUTDIR] LANG FILES
 #
-# -o OUTDIR specifies that output files should be written in OUTDIR
-#    rather than be overwritten
+# -o OUTDIR specifies that output files should rather be written in OUTDIR
 #
 
+print "texi_gettext.py"
+
 import sys
 import re
 import os
 import getopt
-import gettext
 
-optlist, args = getopt.getopt(sys.argv[1:],'o:')
-buildscript_dir, localedir, lang = args[0:3]
+import langdefs
+
+optlist, args = getopt.getopt (sys.argv[1:],'o:')
+lang = args[0]
+files = args[1:]
 
 outdir = '.'
 for x in optlist:
        if x[0] == '-o':
                outdir = x[1]
 
-sys.path.append (buildscript_dir)
-import langdefs
-
 double_punct_char_separator = langdefs.LANGDICT[lang].double_punct_char_sep
-t = gettext.translation('lilypond-doc', localedir, [lang])
-_doc = t.gettext
+_doc = langdefs.translation[lang]
 
-include_re = re.compile (r'@include (.*?)$', re.M)
+include_re = re.compile (r'@include ((?!../lily-).*?)\.texi$', re.M)
+whitespaces = re.compile (r'\s+')
+ref_re = re.compile (r'(?ms)@(rglos|ruser|rprogram|ref)(\{)(.*?)(\})')
+node_section_re = re.compile (r'@(node|(?:unnumbered|appendix)(?:(?:sub){0,2}sec)?|top|chapter|(?:sub){0,2}section|(?:major|chap|(?:sub){0,2})heading)( )(.*?)(\n)')
+menu_entry_re = re.compile (r'\* (.*?)::')
 
 def title_gettext (m):
-       return '@' + m.group (1) + m.group (2) + _doc (m.group (3)) + m.group (4)
+       if m.group (2) == '{':
+               r = whitespaces.sub (' ', m.group (3))
+       else:
+               r = m.group (3)
+       return '@' + m.group (1) + m.group (2) + _doc (r) + m.group (4)
+
+def menu_entry_gettext (m):
+       return '* ' + _doc (m.group (1)) + '::'
+
+def include_replace (m, filename):
+       if os.path.exists (os.path.join (os.path.dirname (filename), m.group(1)) + '.texi'):
+               return '@include ' + m.group(1) + '.pdftexi'
+       return m.group(0)
 
 def process_file (filename):
        print "Processing %s" % filename
        f = open (filename, 'r')
        page = f.read ()
        f.close()
-       page = re.sub (r'(?L)@(rglos|(?:unnumbered|appendix)(?:(?:sub){0,2}sec)?|top|chapter|(?:sub){0,2}section|(?:major|chap|(?:sub){0,2})heading)(\{| )(.*?)(\}|\n)', title_gettext, page)
+       page = node_section_re.sub (title_gettext, page)
+       page = ref_re.sub (title_gettext, page)
+       page = menu_entry_re.sub (menu_entry_gettext, page)
        page = page.replace ("""-- SKELETON FILE --
 When you actually translate this file, please remove these lines as
 well as all `UNTRANSLATED NODE: IGNORE ME' lines.""", '')
        page = page.replace ('UNTRANSLATED NODE: IGNORE ME', _doc ("This section has not been translated yet; please refer to the manual in English."))
-       f = open (os.path.join (outdir, filename), 'w')
+       includes = include_re.findall (page)
+       page = include_re.sub (lambda m: include_replace (m, filename), page)
+       p = os.path.join (outdir, filename) [:-4] + 'pdftexi'
+       f = open (p, 'w')
        f.write (page)
        f.close ()
        dir = os.path.dirname (filename)
-       for file in include_re.findall (page):
-               p = os.path.join (dir, file)
+       for file in includes:
+               p = os.path.join (dir, file) + '.texi'
                if os.path.exists (p):
                        process_file (p)
 
-for filename in args[3:]:
+for filename in files:
        process_file (filename)
-
-toto = raw_input ("Press enter to continue")