X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=buildscripts%2Fhtml-gettext.py;h=65efe8f28396637b75ffd2f2fea7655632205066;hb=29b060250128c577ab8f3cc4837d35b4ace625bf;hp=97f8e5f6f66fbc806490d01a12625800cb3f34e9;hpb=e0fe5d924082970ba7280ccb148eadababf00983;p=lilypond.git diff --git a/buildscripts/html-gettext.py b/buildscripts/html-gettext.py index 97f8e5f6f6..65efe8f283 100644 --- a/buildscripts/html-gettext.py +++ b/buildscripts/html-gettext.py @@ -1,45 +1,58 @@ #!@PYTHON@ # html-gettext.py -# Usage: html-gettext.py [-o OUTDIR] LOCALEDIR LANG FILES +# USAGE: html-gettext.py [-o OUTDIR] BUILDSCRIPT-DIR LOCALEDIR LANG FILES # # -o OUTDIR specifies that output files should be written in OUTDIR # rather than be overwritten # -# LANG -# LOCALEDIR should contain 'lilypond-doc' message catalogs - - -### DATA -# Currently, typo_rules[LANG] only defines the HTML-coded space occuring -# before double punctuation characters (i.e. : ; ? ! ) for LANG - -typo_rules = { 'fr':' ', 'default':'' } - - -### PROGRAM import sys import re import os -import string -import gettext import getopt +import gettext optlist, args = getopt.getopt(sys.argv[1:],'o:') +buildscript_dir, localedir, lang = args[0:3] outdir = '.' for x in optlist: if x[0] == '-o': outdir = x[1] -if args[1] in typo_rules.keys(): - dbl_punct_char_separator = typo_rules[args[1]] -else: - dbl_punct_char_separator = typo_rules['default'] - -t = gettext.translation('lilypond-doc', args[0], [args[1]]) -_ = t.gettext +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]) +my_gettext = t.gettext + +html_codes = ((' -- ', ' – '), + (' --- ', ' — ')) +html2texi = {'command': (re.compile (r'(.*?)'), r'@command{\1}'), + 'code': (re.compile (r'(.*?)'), r'@code{\1}') + } +texi2html = {'command': (re.compile (r'@command{(.*?)}'), r'\1'), + 'code': (re.compile (r'@code{(.*?)}'), r'\1') + } +whitespaces = re.compile (r'\s+') + + +def _ (s): + if not s: + return '' + s = whitespaces.sub (' ', s) + for c in html_codes: + s = s.replace (c[1], c[0]) + for u in html2texi.values(): + s = u[0].sub (u[1], s) + s = my_gettext (s) + for u in texi2html.values(): + s = u[0].sub (u[1], s) + for c in html_codes: + s = s.replace (c[0], c[1]) + return s def link_gettext (m): return '' @@ -48,26 +61,40 @@ def title_gettext (m): return '' + _(m.group(1)) + ' - ' + m.group(2) + '' def a_href_gettext (m): - if m.group(4) == ':': - s = dbl_punct_char_separator + ':' - elif m.group(4) == None: - s = '' - return '' + s + s = '' + if m.group(0)[-1] == ':': + s = double_punct_char_separator + ':' + t = '' + if m.lastindex == 7: + t = m.group(7) + return '' + s def h_gettext (m): - return '' + \ - (m.group(3) or '') + _(m.group(4)) + '' + if m.group (3): + s = _(m.group(3)) + else: + s= '' + return '' + s +\ + m.group(4) + _(m.group(5)) + '' + +def crossmanual_ref_gettext (m): + return '' + _(m.group(2)) + '' -for filename in args[2:]: +for filename in args[3:]: f = open (filename, 'r') page = f.read () f.close() page = re.sub (r'', link_gettext, page) page = re.sub (r'([^<]*?) - ([^<]*?)', title_gettext, page) - page = re.sub (r')([^<]+)(:)?', a_href_gettext, page) - page = re.sub (r'([\d.]+ )?([^<]+)', h_gettext, page) + # ugh + page = re.sub (r'(?ms))()?(Appendix )?([A-Z\d.]+ |)(.+?)(?(3)):?', a_href_gettext, page) + page = re.sub (r'(Appendix |)([A-Z\d.]+ |)?([^<]+)', h_gettext, page) + page = re.sub (r'(.+?)', crossmanual_ref_gettext, page) + # this is necessary for entries not translated by a_href_gettext + page = re.sub (r'(.+?)', crossmanual_ref_gettext, page) for w in ('Next:', 'Previous:', 'Up:'): page = re.sub (w, _(w), page) + page = langdefs.LANGDICT[lang].html_filter (page) f = open (os.path.join (outdir, filename), 'w') f.write (page) f.close ()