diff --git a/development/scons/SConstruct b/development/scons/SConstruct index 8c6e74a83a..51069d5e7a 100644 --- a/development/scons/SConstruct +++ b/development/scons/SConstruct @@ -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: diff --git a/development/scons/scons_manifest.py b/development/scons/scons_manifest.py index 18fdadee44..bbf40dcc2f 100644 --- a/development/scons/scons_manifest.py +++ b/development/scons/scons_manifest.py @@ -2200,6 +2200,7 @@ lib_layouts_files = Split(''' hollywood.layout ijmpc.layout ijmpd.layout + isprs.layout jgrga.layout kluwer.layout latex8.layout diff --git a/development/scons/scons_utils.py b/development/scons/scons_utils.py index e5c995eed9..3fe960ee6d 100644 --- a/development/scons/scons_utils.py +++ b/development/scons/scons_utils.py @@ -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*(.*)') + prop = re.compile(r'\s* + if skipNextLine: + skipNextLine = False + continue + # skip the line after + if prop.match(line): + skipNextLine = True + continue + # get lines that match ... + if pat.match(line): + (string,) = pat.match(line).groups() + string = string.replace('&', '&').replace('<', '<').replace('>', '>').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 ... + 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':