#
import sys, os, re, getopt
-
def relativePath(path, base):
'''return relative path from top source dir'''
# full pathname of path
path1 = os.path.normpath(os.path.realpath(path)).split(os.sep)
- path2 = os.path.normpath(base).split(os.sep)
+ path2 = os.path.normpath(os.path.realpath(base)).split(os.sep)
if path1[:len(path2)] != path2:
print "Path %s is not under top source directory" % path
- return os.path.join(*path1[len(path2):])
+ path3 = os.path.join(*path1[len(path2):]);
+ # replace all \ by / such that we get the same comments on Windows and *nix
+ path3 = path3.replace('\\', '/')
+ return path3
def ui_l10n(input_files, output, base):
'''Generate pot file from lib/ui/*'''
output = open(output, 'w')
Submenu = re.compile(r'^[^#]*Submenu\s+"([^"]*)"')
+ Popupmenu = re.compile(r'^[^#]*PopupMenu\s+"[^"]+"\s+"([^"]*)"')
Toolbar = re.compile(r'^[^#]*Toolbar\s+"[^"]+"\s+"([^"]*)"')
Item = re.compile(r'[^#]*Item\s+"([^"]*)"')
for src in input_files:
input = open(src)
for lineno, line in enumerate(input.readlines()):
- # get lines that match <string>...</string>
if Submenu.match(line):
(string,) = Submenu.match(line).groups()
string = string.replace('_', ' ')
+ elif Popupmenu.match(line):
+ (string,) = Popupmenu.match(line).groups()
elif Toolbar.match(line):
(string,) = Toolbar.match(line).groups()
elif Item.match(line):
(string,) = Item.match(line).groups()
else:
continue
- string = string.replace('\\', '\\\\').replace('"', '')
+ string = string.replace('"', '')
if string != "":
print >> output, '#: %s:%d\nmsgid "%s"\nmsgstr ""\n' % \
(relativePath(src, base), lineno+1, string)
for src in input_files:
input = open(src)
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('_', ' ')
input = open(src)
skipNextLine = False
for lineno, line in enumerate(input.readlines()):
- # looking for a line with <string></string>
+ # skip the line after <property name=shortcut>
if skipNextLine:
skipNextLine = False
continue
- # skip the line after <property name=shortcut>
if prop.match(line):
skipNextLine = True
continue
for lineno, line in enumerate(input.readlines()):
if line[0] == '#':
continue
- items = line.split('"')
+ items = line.split()
# empty lines?
if len(items) < 3:
continue
# msgid "Afrikaans"
# msgstr ""
# I do not care extra "s like "af_ZA"
- print >> output, '#: %s:%d\nmsgid "%s"\nmsgstr ""\n' % (relativePath(input_files[0], base), lineno+1, items[1])
+ print >> output, '#: %s:%d\nmsgid "%s"\nmsgstr ""\n' % (relativePath(input_files[0], base), lineno+1, items[2].strip('"'))
input.close()
output.close()
-def processFiles(input_type, input_files, output, base):
- '''Process files according to input_type'''
- if input_type not in ['ui', 'layouts', 'qt4', 'languages'] or output is None:
- print 'Wrong input type or output filename.'
- sys.exit(1)
- if input_type == 'ui':
- ui_l10n(input_files, output, base)
- elif input_type == 'layouts':
- layouts_l10n(input_files, output, base)
- elif input_type == 'qt4':
- qt4_l10n(input_files, output, base)
- else:
- languages_l10n(input_files, output, base)
-
-
Usage = '''
lyx_pot.py [-b|--base top_src_dir] [-o|--output output_file] [-h|--help] -t|--type input_type input_files