+ res = LabelString.search(line)
+ if res != None:
+ string = res.group(1)
+ if not layouttranslations:
+ writeString(out, src, base, lineno, string)
+ continue
+ res = GuiName.search(line)
+ if res != None:
+ string = res.group(1)
+ if layouttranslations:
+ # gui name must only be added for floats
+ if readingFloat:
+ keyset.add(string)
+ else:
+ writeString(out, src, base, lineno, string)
+ continue
+ res = CategoryName.search(line)
+ if res != None:
+ string = res.group(1)
+ if not layouttranslations:
+ writeString(out, src, base, lineno, string)
+ continue
+ res = ListName.search(line)
+ if res != None:
+ string = res.group(1)
+ if layouttranslations:
+ keyset.add(string.strip('"'))
+ else:
+ writeString(out, src, base, lineno, string)
+ continue
+ res = InsetLayout.search(line)
+ if res != None:
+ string = res.group(1)
+ string = string.replace('_', ' ')
+ #Flex:xxx is not used in translation
+ #if not layouttranslations:
+ # writeString(out, src, base, lineno, string)
+ m = FlexCheck.search(string)
+ if m:
+ if not layouttranslations:
+ writeString(out, src, base, lineno, m.group(1))
+ continue
+ res = Category.search(line)
+ if res != None:
+ string = res.group(1)
+ if not layouttranslations:
+ writeString(out, src, base, lineno, string)
+ continue
+ res = CounterFormat.search(line)
+ if res != None:
+ string = res.group(1)
+ if not layouttranslations:
+ writeString(out, src, base, lineno, string)
+ continue
+ res = Float.search(line)
+ if res != None:
+ readingFloat = True
+ continue
+ res = CiteFormat.search(line)
+ if res != None:
+ readingCiteFormats = True
+ res = End.search(line)
+ if res != None:
+ readingCiteFormats = False
+ readingFloat = False
+ if readingCiteFormats:
+ res = KeyVal.search(line)
+ if res != None:
+ val = res.group(1)
+ if not layouttranslations:
+ writeString(out, src, base, lineno, val)
+
+ if layouttranslations:
+ # Extract translations of layout files
+ import polib
+
+ # Sort languages and key to minimize the diff between different runs
+ # with changed translations
+ languages.sort()
+ keys = []
+ for key in keyset:
+ keys.append(key)
+ keys.sort()
+
+ print >> out, '''# This file has been automatically generated by po/lyx_pot.py.
+# PLEASE MODIFY ONLY THE LAGUAGES HAVING NO .po FILE! If you want to regenerate
+# this file from the translations, run `make ../lib/layouttranslations' in po.
+# Python polib library is needed for building the output file.
+#
+# This file should remain fixed during minor LyX releases.'''
+ for lang in languages:
+ print >> out, '\nTranslation %s' % lang
+ if lang in oldtrans.keys():
+ trans = oldtrans[lang]
+ else:
+ trans = dict()
+ if not lang in oldlanguages:
+ poname = os.path.join(base, 'po/' + lang + '.po')
+ po = polib.pofile(poname)
+ # Iterate through po entries and not keys for speed reasons.
+ # FIXME: The code is still too slow
+ for entry in po:
+ if not entry.translated():
+ continue
+ if entry.msgid in keys:
+ key = entry.msgid
+ val = entry.msgstr
+ # some translators keep untranslated entries
+ if val != key:
+ trans[key] = val
+ for key in keys:
+ if key in trans.keys():
+ val = trans[key].replace('\\', '\\\\').replace('"', '\\"')
+ key = key.replace('\\', '\\\\').replace('"', '\\"')
+ print >> out, '\t"%s" "%s"' % \
+ (key.encode('utf-8'), val.encode('utf-8'))
+ # to print untranslated entries, uncomment the following lines
+ #else:
+ # key = key.replace('\\', '\\\\').replace('"', '\\"')
+ # print >> out, '\t"%s" "%s"' % \
+ # (key.encode('utf-8'), key.encode('utf-8'))
+ print >> out, 'End'
+
+ out.close()