Update/fixes (was escaping more chars than needed!)
authorBastien Montagne <montagne29@wanadoo.fr>
Sat, 7 Jul 2012 14:28:49 +0000 (14:28 +0000)
committerBastien Montagne <montagne29@wanadoo.fr>
Sat, 7 Jul 2012 14:28:49 +0000 (14:28 +0000)
release/scripts/modules/bl_i18n_utils/settings.py
release/scripts/modules/bl_i18n_utils/update_po.py
release/scripts/modules/bl_i18n_utils/update_pot.py

index 72b521d67a56c1f229a7cc4e315ad177dc18973a..094d8e481e9c31c0e64b0098eb747402772adcd3 100644 (file)
@@ -100,8 +100,11 @@ PYGETTEXT_KEYWORDS = (() +
     tuple((r"{}\(\s*" + _ctxt_re + r"\s*,\s*"+ _msg_re + r"\s*\)").format(it)
           for it in ("CTX_IFACE_", "CTX_TIP_", "CTX_N_"))
 )
-#GETTEXT_KEYWORDS = ("IFACE_", "CTX_IFACE_:1c,2", "TIP_", "CTX_TIP_:1c,2",
-#                    "N_", "CTX_N_:1c,2")
+
+ESCAPE_RE = (
+    ('((?<!\\\\)"|(?<!\\\\)\\\\(?!\\\\|"))', r"\\\1"),
+    ('\t', r"\\t"),
+)
 
 # Should po parser warn when finding a first letter not capitalized?
 WARN_MSGID_NOT_CAPITALIZED = True
index 042b46c03f20dadc4938f9e6ad8bd1d052db829a..c4e980aad2a870b04cfc08c5b4c73cf2f953a000 100755 (executable)
@@ -71,6 +71,8 @@ def process_po(po, lang):
     # update po file
     cmd = (GETTEXT_MSGMERGE_EXECUTABLE,
            "--update",
+           "-w", "1",  # XXX Ugly hack to prevent msgmerge merging
+                       #     short source comments together!
            "--no-wrap",
            "--backup=none",
            "--lang={}".format(lang),
index ceef51aa0721d98537cd7c0c4975d176e236a032..f4468da2bad21326dcf43ed17756ea85668844dd 100755 (executable)
@@ -59,16 +59,6 @@ NC_ALLOWED = settings.WARN_MSGID_NOT_CAPITALIZED_ALLOWED
 SPELL_CACHE = settings.SPELL_CACHE
 
 
-#def generate_valid_potfiles(final_potfiles):
-#    "Generates a temp potfiles.in with aboslute paths."
-#    with open(FILE_NAME_POTFILES, 'r', 'utf-8') as f, \
-#         open(final_potfiles, 'w', 'utf-8') as w:
-#        for line in f:
-#            line = utils.stripeol(line)
-#            if line:
-#                w.write("".join((os.path.join(SOURCE_DIR,
-#                                              os.path.normpath(line)), "\n")))
-
 # Do this only once!
 # Get contexts defined in blf.
 CONTEXTS = {}
@@ -79,7 +69,7 @@ with open(os.path.join(SOURCE_DIR, settings.PYGETTEXT_CONTEXTS_DEFSRC)) as f:
     # (key=C_macro_name, value=C_string).
     CONTEXTS = dict(m.groups() for m in reg.finditer(f))
 
-# Build regexes to extract messages (with optinal contexts) from C source.
+# Build regexes to extract messages (with optional contexts) from C source.
 pygettexts = tuple(re.compile(r).search
                    for r in settings.PYGETTEXT_KEYWORDS)
 _clean_str = re.compile(settings.str_clean_re).finditer
@@ -203,6 +193,8 @@ def gen_empty_pot():
     return utils.gen_empty_messages(blender_rev, time_str, year_str)
 
 
+escape_re = tuple(re.compile(r[0]) for r in settings.ESCAPE_RE)
+escape = lambda s, n: escape_re[n].sub(settings.ESCAPE_RE[n][1], s)
 def merge_messages(msgs, states, messages, do_checks, spell_cache):
     num_added = num_present = 0
     for (context, msgid), srcs in messages.items():
@@ -214,9 +206,8 @@ def merge_messages(msgs, states, messages, do_checks, spell_cache):
                 print("\tFrom:\n\t\t" + "\n\t\t".join(srcs))
 
         # Escape some chars in msgid!
-        msgid = msgid.replace("\\", "\\\\")
-        msgid = msgid.replace("\"", "\\\"")
-        msgid = msgid.replace("\t", "\\t")
+        for n in range(len(escape_re)):
+            msgid = escape(msgid, n)
 
         srcs = [COMMENT_PREFIX_SOURCE + s for s in srcs]