[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [48513] trunk/blender/release/scripts/ modules/i18n: Nice update to xgettext replacement, now finds 608 strings, think this covers all cases...

Bastien Montagne montagne29 at wanadoo.fr
Tue Jul 3 03:12:12 CEST 2012


Revision: 48513
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=48513
Author:   mont29
Date:     2012-07-03 01:11:59 +0000 (Tue, 03 Jul 2012)
Log Message:
-----------
Nice update to xgettext replacement, now finds 608 strings, think this covers all cases...

Will run a complete test case tomorrow, regexes killed me this evening!

Modified Paths:
--------------
    trunk/blender/release/scripts/modules/i18n/bl_process_msg.py
    trunk/blender/release/scripts/modules/i18n/settings.py

Modified: trunk/blender/release/scripts/modules/i18n/bl_process_msg.py
===================================================================
--- trunk/blender/release/scripts/modules/i18n/bl_process_msg.py	2012-07-03 00:02:45 UTC (rev 48512)
+++ trunk/blender/release/scripts/modules/i18n/bl_process_msg.py	2012-07-03 01:11:59 UTC (rev 48513)
@@ -466,6 +466,8 @@
         keys = set()
         for c in check_ctxt.values():
             keys |= c
+        # XXX Temp, see below
+        c -= check_ctxt["multi_rnatip"]
         for key in keys:
             if key in check_ctxt["undoc_ops"]:
                 print("\tThe following operators are undocumented:")

Modified: trunk/blender/release/scripts/modules/i18n/settings.py
===================================================================
--- trunk/blender/release/scripts/modules/i18n/settings.py	2012-07-03 00:02:45 UTC (rev 48512)
+++ trunk/blender/release/scripts/modules/i18n/settings.py	2012-07-03 01:11:59 UTC (rev 48513)
@@ -66,9 +66,32 @@
 PYGETTEXT_CONTEXTS = "#define\\s+(BLF_I18NCONTEXT_[A-Z_0-9]+)\\s+\"([^\"]*)\""
 
 # Keywords' regex.
-_str_whole_re = ("(?P<{_}>[\"'])(?:[^(?P={_})]|(?<=\\\\)(?P={_})|"
-                 "(?:(?P={_})\\s*\\+?\\s*(?P={_})))+(?P={_})")
-str_clean_re = "(?P<_grp>[\"'])(?P<clean>(?:[^(?P=_grp)]|(?<=\\\\)(?P=_grp))+)(?P=_grp)"
+# XXX Most unfortunately, we can't use named backreferences inside character sets,
+#     which makes the regexes even more twisty... :/
+_str_base = (
+    # Match void string
+    "(?P<{_}1>[\"'])(?P={_}1)"  # Get opening quote (' or "), and closing immediately.
+    "|"
+    # Or match non-void string
+    "(?P<{_}2>[\"'])"  # Get opening quote (' or ").
+        "(?{capt}(?:"
+            # This one is for crazy things like "hi \\\\\" folks!"...
+            r"(?:(?!<\\)(?:\\\\)*\\(?=(?P={_}2)))|"
+            # The most common case.
+            ".(?!(?P={_}2))"
+        ")+.)"  # Don't forget the last char!
+    "(?P={_}2)"  # And closing quote.
+)
+str_clean_re = _str_base.format(_="g", capt="P<clean>")
+# Here we have to consider two different cases (empty string and other).
+_str_whole_re = (
+    _str_base.format(_="{_}1_", capt=":") +
+    # Optional loop start, this handles "split" strings...
+    "(?:(?<=[\"'])\\s*(?=[\"'])(?:"
+        + _str_base.format(_="{_}2_", capt=":") +
+    # End of loop.
+    "))*"
+)
 _ctxt_re = r"(?P<ctxt_raw>(?:" + _str_whole_re.format(_="_ctxt") + r")|(?:[A-Z_0-9]+))"
 _msg_re = r"(?P<msg_raw>" + _str_whole_re.format(_="_msg") + r")"
 PYGETTEXT_KEYWORDS = (() +




More information about the Bf-blender-cvs mailing list