X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=buildscripts%2Ftexi-gettext.py;h=546819b155f0fb1f51a0dc6d27ac51a7104361e9;hb=af99781b40aed8c6dedbd7d78f1a893355a98e09;hp=dcbcded41b4c82ac784ad6542aa8d2ef6aa55742;hpb=3c08f91969cc562bb9aa354e2b9f4da7f0715260;p=lilypond.git diff --git a/buildscripts/texi-gettext.py b/buildscripts/texi-gettext.py index dcbcded41b..546819b155 100644 --- a/buildscripts/texi-gettext.py +++ b/buildscripts/texi-gettext.py @@ -2,10 +2,9 @@ # -*- 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" @@ -14,114 +13,65 @@ 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 + if x[0] == '-o': + outdir = x[1] double_punct_char_separator = langdefs.LANGDICT[lang].double_punct_char_sep -t = gettext.translation('lilypond-doc', localedir, [lang]) -_doc = t.gettext - -include_re = re.compile (r'@include (.*?)$', re.M) - -# Why not use recode? -# - well, it would add one more dependency... -accents2texi = ( - ("á", "@'a"), - ("à", "@`a"), - ("â", "@^a"), - ("ä", "@\"a"), - ("é", "@'e"), - ("è", "@`e"), - ("ê", "@^e"), - ("ë", "@\"e"), - ("ó", "@'o"), - ("ò", "@`o"), - ("ô", "@^o"), - ("ö", "@\"o"), - ("ú", "@'u"), - ("ù", "@`u"), - ("û", "@^u"), - ("ü", "@\"u"), - ("ç", "@,{c}"), - ("À", "@`A"), - ("Á", "@'A"), - ("Â", "@^A"), - ("Ä", "@\"A"), - ("É", "@'E"), - ("È", "@`E"), - ("Ê", "@^E"), - ("Ë", "@\"E"), - ("Ó", "@'O"), - ("Ò", "@`O"), - ("Ô", "@^O"), - ("Ö", "@\"O"), - ("Ú ", "@'U"), - ("Ù", "@`U"), - ("Û", "@^U"), - ("Ü", "@\"U"), - ("Ç", "@,{C}"), - ("Í", "@'{@dotless{i}}"), - ("ì", "@`{@dotless{i}}"), - ("î", "@^{@dotless{i}}"), - ("ï", "@\"{@dotless{i}}"), - ("Í", "@'I"), - ("Ì", "@`I"), - ("Î", "@^I"), - ("Ï", "@\"I"), - ("œ", "@oe{}"), - ("Œ", "@OE{}"), - ("æ", "@ae{}"), - ("Æ", "@AE{}"), - ("¡", "@exclamdown{}"), - ("¿", "@questiondown{}"), - ("ø", "@o{}"), - ("Ø", "@O{}"), - ("ß", "@ss{}"), - ("ł", "@l{}"), - ("Ł", "@L{}"), - ("å", "@aa{}"), - ("Å", "@AA{}")) +_doc = langdefs.translation[lang] +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)) + '::' + 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'@(node|(?:unnumbered|appendix)(?:(?:sub){0,2}sec)?|top|chapter|(?:sub){0,2}section|(?:major|chap|(?:sub){0,2})heading)( )(.*?)(\n)', title_gettext, page) - page = re.sub (r'(?L)@(rglos|ref)(\{)(.*?)(\})', title_gettext, page) - page = re.sub (r'\* (.*?)::', menu_entry_gettext, page) - page = page.replace ("""-- SKELETON FILE -- + print "Processing %s" % filename + f = open (filename, 'r') + page = f.read () + f.close() + 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.")) - for (u_char, texiaccent_char) in accents2texi: - page = page.replace (u_char, texiaccent_char) - p = os.path.join (outdir, filename) - 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) - if os.path.exists (p): - process_file (p) + page = page.replace ('UNTRANSLATED NODE: IGNORE ME', _doc ("This section has not been translated yet; please refer to the manual in English.")) + 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 includes: + p = os.path.join (dir, file) + '.texi' + if os.path.exists (p): + process_file (p) -for filename in args[3:]: - process_file (filename) +for filename in files: + process_file (filename)