1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
#!/usr/bin/python
from __future__ import print_function
from __future__ import unicode_literals # make all literals unicode strings by default (even in Python 2)
import os
import re
import sys
from io import open # needed for support of encoding parameter in Python 2
# check where to look for the Inkscape files to bundle
# - btool builds used [root]/inkscape
# - cmake builds use [root]/build/inkscape unless "DESTDIR" is specified
def get_inkscape_dist_dir():
# first check the environment variable
sourcedir = os.getenv('INKSCAPE_DIST_PATH')
if sourcedir is None:
sourcedir = ''
if not os.path.isdir(sourcedir):
sourcedir = '..\\..\\inkscape'
if not os.path.isdir(sourcedir):
sourcedir = '..\\..\\build\\inkscape'
if not os.path.isdir(sourcedir):
print("could not find inkscape distribution files, please set environment variable 'INKSCAPE_DIST_PATH'")
sys.exit(1)
return sourcedir
# get the full list of available Inkscape UI translations (by looking at available .po files in the /po directory)
def get_inkscape_locales():
files = os.listdir('..\\..\\po')
po_files = [file for file in files if file.endswith('.po')]
locales = [po_file[0:-3] for po_file in po_files if po_file.endswith('.po')]
return locales
# get the list of available Inkscape UI translations (by parsing inkscape-preferences.cpp)
# (note that this is also used in /packaging/win32/languages/_language_lists.py, don't break it!)
def get_inkscape_locales_and_names():
re_languages = re.compile(r'Glib::ustring languages\[\] = \{(.+?)\};', re.DOTALL)
re_langValues = re.compile(r'Glib::ustring langValues\[\] = \{(.+?)\};', re.DOTALL)
re_quotes = re.compile(r'"(.*?)"')
# get the raw array contents from inkscape-preferences.cpp
filepath = os.path.join(os.path.dirname(__file__), '../../src/ui/dialog/inkscape-preferences.cpp')
with open(filepath, 'r', encoding='utf-8') as f:
languages = re.search(re_languages, f.read())
f.seek(0)
langValues = re.search(re_langValues, f.read())
# split array elements and extract strings
if languages and langValues:
languages = languages.group(1).split(',')
langValues = langValues.group(1).split(',')
languages = [re.search(re_quotes, language).group(1) for language in languages]
langValues = [re.search(re_quotes, langValue).group(1) for langValue in langValues]
# return the results as a dict (remove first element which is "System default")
if languages and langValues:
return dict(zip(langValues[1:], languages[1:]))
else:
print("Could not get the list of Inkscape translations from inkscape-preferences.cpp")
sys.exit(1)
|