e = ''
else:
e = g[1]
- if not g[0] in pages_dict.keys():
+ if not g[0] in pages_dict:
pages_dict[g[0]] = [e]
else:
pages_dict[g[0]].append (e)
return page_flavors
def add_menu (page_flavors, prefix, available, target, translation):
- for k in page_flavors.keys():
+ for k in page_flavors:
language_menu = ''
languages = ''
if page_flavors[k][0] != '':
page_flavors = add_menu (page_flavors, prefix, available, target, translation)
subst = dict ([i for i in globals().items() if type (i[1]) is str])
subst.update (dict ([i for i in locals().items() if type (i[1]) is str]))
- for k in page_flavors.keys():
- if page_flavors[k][0] in translation.keys():
- for name in subst.keys():
+ for k in page_flavors:
+ if page_flavors[k][0] in translation:
+ for name in subst:
subst[name] = translation[page_flavors[k][0]] (subst[name])
subst['footer_name_version'] = subst['footer_name_version'] % subst
subst['footer_report_errors'] = subst['footer_report_errors'] % subst
-#!@PYTHON@
+#!/usr/bin/env python
import __main__
import optparse
(diff_string, error) = buildlib.check_translated_doc (original, translated_contents, color=not update_mode)
if error:
- sys.stderr.write ('warning: %s: %s' % (file_name, error))
+ sys.stderr.write ('warning: %s: %s' % (file_name, error))
if update_mode:
if error or len (diff_string) >= os.path.getsize (original):
global update_mode, text_editor
import_path, files = do_options ()
- if 'EDITOR' in os.environ.keys ():
+ if 'EDITOR' in os.environ:
text_editor = os.environ['EDITOR']
else:
update_mode = False
buildlib.verbose = verbose
for i in files:
- do_file (i, langdefs.LANGDICT.keys(), buildlib)
+ do_file (i, langdefs.LANGDICT.keys (), buildlib)
if __name__ == '__main__':
main ()
outdir = '.'
for x in optlist:
- if x[0] == '-o':
- outdir = x[1]
+ if x[0] == '-o':
+ outdir = x[1]
double_punct_char_separator = langdefs.LANGDICT[lang].double_punct_char_sep
my_gettext = langdefs.translation[lang]
html_codes = ((' -- ', ' – '),
- (' --- ', ' — '))
+ (' --- ', ' — '))
html2texi = {'command': (re.compile (r'<samp><span class="command">(.*?)</span></samp>'), r'@command{\1}'),
- 'code': (re.compile (r'<code>(.*?)</code>'), r'@code{\1}')
- }
+ 'code': (re.compile (r'<code>(.*?)</code>'), r'@code{\1}')
+ }
texi2html = {'command': (re.compile (r'@command{(.*?)}'), r'<samp><span class="command">\1</span></samp>'),
- 'code': (re.compile (r'@code{(.*?)}'), r'<code>\1</code>')
- }
+ 'code': (re.compile (r'@code{(.*?)}'), r'<code>\1</code>')
+ }
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
+ 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 '<link rel="' + m.group(1) + '" ' + m.group(2) + ' title="' + _(m.group(3)) + '">'
+ return '<link rel="' + m.group(1) + '" ' + m.group(2) + ' title="' + _(m.group(3)) + '">'
def title_gettext (m):
- return '<title>' + _(m.group(1)) + ' - ' + m.group(2) + '</title>'
+ return '<title>' + _(m.group(1)) + ' - ' + m.group(2) + '</title>'
def a_href_gettext (m):
- s = ''
- if m.group(0)[-1] == ':':
- s = double_punct_char_separator + ':'
- t = ''
- if m.lastindex == 7:
- t = m.group(7)
- return '<a ' + (m.group(1) or '') + m.group(2) + (m.group(3) or '') + _(m.group(4)) + m.group(5) + _(m.group(6)) + t + '</a>' + s
+ s = ''
+ if m.group(0)[-1] == ':':
+ s = double_punct_char_separator + ':'
+ t = ''
+ if m.lastindex == 7:
+ t = m.group(7)
+ return '<a ' + (m.group(1) or '') + m.group(2) + (m.group(3) or '') + _(m.group(4)) + m.group(5) + _(m.group(6)) + t + '</a>' + s
def h_gettext (m):
- if m.group (3):
- s = _(m.group(3))
- else:
- s= ''
- return '<h' + m.group(1) + m.group(2) + '>' + s +\
- m.group(4) + _(m.group(5)) + '</h' + m.group(1) + '>'
+ if m.group (3):
+ s = _(m.group(3))
+ else:
+ s= ''
+ return '<h' + m.group(1) + m.group(2) + '>' + s +\
+ m.group(4) + _(m.group(5)) + '</h' + m.group(1) + '>'
def crossmanual_ref_gettext (m):
- return '<a href="' + m.group(1) + '">' + _(m.group(2)) + '</a>'
+ return '<a href="' + m.group(1) + '">' + _(m.group(2)) + '</a>'
for filename in files:
- f = open (filename, 'r')
- page = f.read ()
- f.close()
- page = re.sub (r'<link rel="(up|prev|next)" (.*?) title="([^"]*?)">', link_gettext, page)
- page = re.sub (r'<title>([^<]*?) - ([^<]*?)</title>', title_gettext, page)
- # ugh
- page = re.sub (r'(?ms)<a ((?:rel="\w+")? ?(?:accesskey="[^"]+?")? ?(?:name=".*?")? ?)(href=".+?">)(<code>)?(Appendix )?([A-Z\d.]+ |)(.+?)(?(3)</code>)</a>:?', a_href_gettext, page)
- page = re.sub (r'<h(\d)( class="\w+"|)>(Appendix |)([A-Z\d.]+ |)?([^<]+)</h\1>', h_gettext, page)
- page = re.sub (r'<a href="(\.\./(?:music-glossary|lilypond-program/)?(?:.+?))">(.+?)</a>', crossmanual_ref_gettext, page)
- # this is necessary for entries not translated by a_href_gettext
- page = re.sub (r'<a href="(.+?)">(.+?)</a>', 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 ()
+ f = open (filename, 'r')
+ page = f.read ()
+ f.close()
+ page = re.sub (r'<link rel="(up|prev|next)" (.*?) title="([^"]*?)">', link_gettext, page)
+ page = re.sub (r'<title>([^<]*?) - ([^<]*?)</title>', title_gettext, page)
+ # ugh
+ page = re.sub (r'(?ms)<a ((?:rel="\w+")? ?(?:accesskey="[^"]+?")? ?(?:name=".*?")? ?)(href=".+?">)(<code>)?(Appendix )?([A-Z\d.]+ |)(.+?)(?(3)</code>)</a>:?', a_href_gettext, page)
+ page = re.sub (r'<h(\d)( class="\w+"|)>(Appendix |)([A-Z\d.]+ |)?([^<]+)</h\1>', h_gettext, page)
+ page = re.sub (r'<a href="(\.\./(?:music-glossary|lilypond-program/)?(?:.+?))">(.+?)</a>', crossmanual_ref_gettext, page)
+ # this is necessary for entries not translated by a_href_gettext
+ page = re.sub (r'<a href="(.+?)">(.+?)</a>', 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 ()
srcdir = os.path.join (src, tag)
l[tag] = set (map (os.path.basename, glob.glob (os.path.join (srcdir, '*.ly'))))
for f in l[tag]:
- if f in s.keys ():
+ if f in s:
s[f][1].append (tag)
else:
s[f] = (srcdir, [tag])
pairs = []
missing = []
- for f in files[0].keys ():
+ for f in files[0]:
try:
files[1].pop (f)
pairs.append (f)
outdir = '.'
for x in optlist:
- if x[0] == '-o':
- outdir = x[1]
+ if x[0] == '-o':
+ outdir = x[1]
double_punct_char_separator = langdefs.LANGDICT[lang].double_punct_char_sep
_doc = langdefs.translation[lang]
menu_entry_re = re.compile (r'\* (.*?)::')
def title_gettext (m):
- 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)
+ 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)
+ 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 = 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 --
+ 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."))
- 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)
+ 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 files:
- process_file (filename)
+ process_file (filename)
-#!@PYTHON@
+#!/usr/bin/env python
"""
USAGE: translations-status.py BUILDSCRIPT-DIR LOCALEDIR
return ''
class MasterTelyDocument (TelyDocument):
- def __init__ (self, filename, parent_translations=dict ([(lang, None) for lang in langdefs.LANGDICT.keys()])):
+ def __init__ (self, filename, parent_translations=dict ([(lang, None) for lang in langdefs.LANGDICT])):
TelyDocument.__init__ (self, filename)
self.size = len (self.contents)
self.word_count = tely_word_count (self.contents)
- translations = dict ([(lang, os.path.join (lang, filename)) for lang in langdefs.LANGDICT.keys()])
+ translations = dict ([(lang, os.path.join (lang, filename)) for lang in langdefs.LANGDICT])
self.translations = dict ([(lang, TranslatedTelyDocument (translations[lang], self, parent_translations.get (lang)))
- for lang in langdefs.LANGDICT.keys() if os.path.exists (translations[lang])])
+ for lang in langdefs.LANGDICT if os.path.exists (translations[lang])])
if self.translations:
self.includes = [MasterTelyDocument (f, self.translations) for f in self.included_files]
else:
s = '''<table align="center" border="2">
<tr align="center">
<th>%s</th>''' % self.print_title (numbering)
- s += ''.join ([' <th>%s</th>\n' % l for l in self.translations.keys ()])
+ s += ''.join ([' <th>%s</th>\n' % l for l in self.translations])
s += ' </tr>\n'
s += ' <tr align="left">\n <td>Section titles<br>(%d)</td>\n' \
% sum (self.word_count)
s = ''
if self.level[1] == 0: # if self is a master document
s += (self.print_title (numbering) + ' ').ljust (colspec[0])
- s += ''.join (['%s'.ljust (colspec[1]) % l for l in self.translations.keys ()])
+ s += ''.join (['%s'.ljust (colspec[1]) % l for l in self.translations])
s += '\n'
s += ('Section titles (%d)' % sum (self.word_count)).ljust (colspec[0])
## TODO
#per_lang_status_pages = dict ([(l, open (os.path.join (l, 'translations.template.html')). read ())
-# for l in langdefs.LANGDICT.keys ()
+# for l in langdefs.LANGDICT
# if langdefs.LANGDICT[l].enabled])
progress ("Generating status pages...")