]> git.lyx.org Git - features.git/commitdiff
Scons: update_po target part two: qt4_l10n and layouts_l10n
authorBo Peng <bpeng@lyx.org>
Thu, 22 Mar 2007 02:37:26 +0000 (02:37 +0000)
committerBo Peng <bpeng@lyx.org>
Thu, 22 Mar 2007 02:37:26 +0000 (02:37 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@17501 a592a061-630c-0410-9148-cb99ea01b6c8

development/scons/SConstruct
development/scons/scons_manifest.py
development/scons/scons_utils.py

index 8c6e74a83abea2b028ec44d18c5d6e7a256307e7..51069d5e7aa44540d440053b59f6b8e59db2159b 100644 (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:
index 18fdadee44d219094365a101be273929ac825b6d..bbf40dcc2f6d7f16438f005c780c5469d41302bb 100644 (file)
@@ -2200,6 +2200,7 @@ lib_layouts_files = Split('''
     hollywood.layout
     ijmpc.layout
     ijmpd.layout
+    isprs.layout
     jgrga.layout
     kluwer.layout
     latex8.layout
index e5c995eed96b9246c4f66e16b04d8e79bc07c248..3fe960ee6d0e86e7d8e4cf2741fbb1dc60eb9f6b 100644 (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':