Scons: update_po target part two: qt4_l10n and layouts_l10n

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@17501 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Bo Peng 2007-03-22 02:37:26 +00:00
parent dc59f0a1c2
commit 8ab80df229
3 changed files with 67 additions and 2 deletions

View File

@ -2019,8 +2019,14 @@ if update_po:
env.msgmerge(f, '$BUILDDIR/common/lyx.pot')
# build language_l10n.pot
env['BUILDERS']['language_l10n'] = Builder(action=utils.env_language_l10n)
tar = env.language_l10n('$BUILDDIR/common/language_l10n.pot', '$TOP_SRCDIR/lib/languages')
Alias('update_po', tar)
tar1 = env.language_l10n('$BUILDDIR/common/language_l10n.pot', '$TOP_SRCDIR/lib/languages')
env['BUILDERS']['qt4_l10n'] = Builder(action=utils.env_qt4_l10n)
tar2 = env.qt4_l10n('$BUILDDIR/common/qt4_l10n.pot',
['$TOP_SRCDIR/src/frontends/qt4/ui/%s' % x for x in src_frontends_qt4_ui_files])
env['BUILDERS']['layouts_l10n'] = Builder(action=utils.env_layouts_l10n)
tar3 = env.layouts_l10n('$BUILDDIR/common/layouts_l10n.pot',
['$TOP_SRCDIR/lib/layouts/%s' % x for x in lib_layouts_files])
Alias('update_po', [tar1, tar2, tar3])
if build_po:

View File

@ -2200,6 +2200,7 @@ lib_layouts_files = Split('''
hollywood.layout
ijmpc.layout
ijmpd.layout
isprs.layout
jgrga.layout
kluwer.layout
latex8.layout

View File

@ -146,6 +146,64 @@ def env_language_l10n(target, source, env):
output.close()
def env_qt4_l10n(target, source, env):
'''Generate pot file from src/frontends/qt4/ui/*.ui'''
output = open(env.File(target[0]).abspath, 'w')
pat = re.compile(r'\s*<string>(.*)</string>')
prop = re.compile(r'\s*<property.*name.*=.*shortcut')
for src in source:
input = open(env.File(src).abspath)
skipNextLine = False
for lineno, line in enumerate(input.readlines()):
# looking for a line with <string></string>
if skipNextLine:
skipNextLine = False
continue
# skip the line after <property name=shortcut>
if prop.match(line):
skipNextLine = True
continue
# get lines that match <string>...</string>
if pat.match(line):
(string,) = pat.match(line).groups()
string = string.replace('&amp;', '&').replace('&lt;', '<').replace('&gt;', '>').replace('"', r'\"')
print >> output, '#: %s:%d\nmsgid "%s"\nmsgstr ""\n' % \
(relativePath(env, src), lineno+1, string)
input.close()
output.close()
def env_layouts_l10n(target, source, env):
'''Generate pot file from lib/layouts/*.layout and *.inc'''
output = open(env.File(target[0]).abspath, 'w')
Style = re.compile(r'^Style\s+(.*)')
# include ???LabelString???, but exclude comment lines
LabelString = re.compile(r'^[^#]*LabelString\S*\s+(.*)')
GuiName = re.compile(r'\s*GuiName\s+(.*)')
ListName = re.compile(r'\s*ListName\s+(.*)')
for src in source:
input = open(env.File(src).abspath)
for lineno, line in enumerate(input.readlines()):
# get lines that match <string>...</string>
if Style.match(line):
(string,) = Style.match(line).groups()
string = string.replace('_', ' ')
elif LabelString.match(line):
(string,) = LabelString.match(line).groups()
elif GuiName.match(line):
(string,) = GuiName.match(line).groups()
elif ListName.match(line):
(string,) = ListName.match(line).groups()
else:
continue
string = string.replace('\\', '\\\\').replace('"', '')
if string != "":
print >> output, '#: %s:%d\nmsgid "%s"\nmsgstr ""\n' % \
(relativePath(env, src), lineno+1, string)
input.close()
output.close()
def createResFromIcon(env, icon_file, rc_file):
''' create a rc file with icon, and return res file (windows only) '''
if os.name == 'nt':