[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