Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Montagne <montagne29@wanadoo.fr>2012-10-04 17:49:39 +0400
committerBastien Montagne <montagne29@wanadoo.fr>2012-10-04 17:49:39 +0400
commit6527e8a1a85d9bfa92a27912c686b3d7ae56e739 (patch)
treef50eb105346bf82b7106b08d277996c13251ae6d /release
parentef107d1a4d75ffc5645505867efec6b39b114d50 (diff)
Fix for rtl processing of menu strings...
Diffstat (limited to 'release')
-rwxr-xr-xrelease/scripts/modules/bl_i18n_utils/rtl_preprocess.py37
1 files changed, 29 insertions, 8 deletions
diff --git a/release/scripts/modules/bl_i18n_utils/rtl_preprocess.py b/release/scripts/modules/bl_i18n_utils/rtl_preprocess.py
index 5ee5c71be8b..d28f87cf042 100755
--- a/release/scripts/modules/bl_i18n_utils/rtl_preprocess.py
+++ b/release/scripts/modules/bl_i18n_utils/rtl_preprocess.py
@@ -34,6 +34,7 @@
import sys
import ctypes
+import re
try:
import settings
@@ -87,44 +88,64 @@ FRIBIDI_FLAGS_ARABIC = FRIBIDI_FLAG_SHAPE_ARAB_PRES | \
FRIBIDI_FLAG_SHAPE_ARAB_LIGA
+MENU_DETECT_REGEX = re.compile("%x\\d+\\|")
+
+
##### Kernel processing funcs. #####
def protect_format_seq(msg):
"""
Find some specific escaping/formating sequences (like \", %s, etc.,
and protect them from any modification!
"""
+# LRM = "\u200E"
+# RLM = "\u200F"
LRE = "\u202A"
+ RLE = "\u202B"
PDF = "\u202C"
+ LRO = "\u202D"
+ RLO = "\u202E"
+ uctrl = {LRE, RLE, PDF, LRO, RLO}
# Most likely incomplete, but seems to cover current needs.
format_codes = set("tslfd")
digits = set(".0123456789")
+ if not msg:
+ return msg
+ elif MENU_DETECT_REGEX.search(msg):
+ # An ugly "menu" message, just force it whole LRE if not yet done.
+ if msg[0] not in {LRE, LRO}:
+ msg = LRE + msg
+
idx = 0
ret = []
ln = len(msg)
while idx < ln:
dlt = 1
+# # If we find a control char, skip any additional protection!
+# if msg[idx] in uctrl:
+# ret.append(msg[idx:])
+# break
# \" or \'
if idx < (ln - 1) and msg[idx] == '\\' and msg[idx + 1] in "\"\'":
dlt = 2
- # %x12
- elif idx < (ln - 2) and msg[idx] == '%' and msg[idx + 1] in "x" and \
- msg[idx + 2] in digits:
+ # %x12|
+ elif idx < (ln - 2) and msg[idx] == '%' and msg[idx + 1] in "x" and msg[idx + 2] in digits:
dlt = 2
- while (idx + dlt + 1) < ln and msg[idx + dlt + 1] in digits:
+ while (idx + dlt) < ln and msg[idx + dlt] in digits:
+ dlt += 1
+ if (idx + dlt) < ln and msg[idx + dlt] is '|':
dlt += 1
# %.4f
elif idx < (ln - 3) and msg[idx] == '%' and msg[idx + 1] in digits:
dlt = 2
- while (idx + dlt + 1) < ln and msg[idx + dlt + 1] in digits:
+ while (idx + dlt) < ln and msg[idx + dlt] in digits:
dlt += 1
- if (idx + dlt + 1) < ln and msg[idx + dlt + 1] in format_codes:
+ if (idx + dlt) < ln and msg[idx + dlt] in format_codes:
dlt += 1
else:
dlt = 1
# %s
- elif idx < (ln - 1) and msg[idx] == '%' and \
- msg[idx + 1] in format_codes:
+ elif idx < (ln - 1) and msg[idx] == '%' and msg[idx + 1] in format_codes:
dlt = 2
if dlt > 1: