Author: esr
Date: Mon Nov  3 04:04:00 2008
New Revision: 30559

URL: http://svn.gna.org/viewcvs/wesnoth?rev=30559&view=rev
Log:
Refactoring step.

Modified:
    trunk/data/tools/wmllint

Modified: trunk/data/tools/wmllint
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/data/tools/wmllint?rev=30559&r1=30558&r2=30559&view=diff
==============================================================================
--- trunk/data/tools/wmllint (original)
+++ trunk/data/tools/wmllint Mon Nov  3 04:04:00 2008
@@ -1140,6 +1140,104 @@
     else:
         return None
 
+def spellcheck(fn, d):
+    "Spell-check a file using an Enchant dictionary object."
+    local_spellings = []
+    # Accept declared spellings for this file
+    # and for all directories above it.
+    up = fn
+    while True:
+        if not up or up == os.sep:
+            break
+        else:
+            local_spellings += declared_spellings.get(up,[])
+            up = os.path.dirname(up)
+    map(d.add_to_session, local_spellings)
+    for nav in WmlIterator(filename=fn):
+        # Recognize local spelling exceptions
+        if not nav.element and "#" in nav.text:
+            comment = nav.text[nav.text.index("#")-1:]
+            words = re.search("wmllint: local spellings? (.*)", comment)
+            if words:
+                for word in words.group(1).split():
+                    word = word.lower()
+                    d.add_to_session(word)
+                    local_spellings.append(word)
+        # Spell-check message and story parts
+        if nav.element in ("message=", "story=", "description="):
+            (key, prefix, value, comment) = parse_attribute(nav.text)
+            if "no spellcheck" in comment:
+                continue
+            if value.startswith("_"):
+                value = value[1:].strip()
+            value = string_strip(value)
+            value = value.replace("...", " ")
+            #value = value.replace("_ ", " ")
+            #value = value.replace(" _", " ")
+            value = value.replace("female^", " ")
+            value = value.replace("male^", " ")
+            if '<' in value:
+                value = re.sub("<[^>]+>text='([^']*)'<[^>]+>", r"\1", value)
+                value = re.sub("<[0-9,]+>", "", value)
+            value = value.lower()
+            value = re.sub(r'" *\+\s*_ *"', "", value)
+            for token in value.split():
+                if d.check(token):
+                    continue
+                while token and token[0] in " \t([EMAIL PROTECTED]'":
+                    token = token[1:]
+                while token and token[-1] in "-*').,:;?!& \t":
+                    token = token[:-1]
+                if token.startswith("$"):
+                    continue
+                if token.startswith("%"):
+                    continue
+                if token and token[0].isdigit():
+                    continue
+                if not token:
+                    continue
+                token = string_strip(token)
+                if token and d.check(token):
+                    continue
+                elif token.endswith("'s") and d.check(token[:-2]):
+                    continue
+                elif token.endswith("s'") and d.check(token[:-2]):
+                    continue
+                if "-" in token:
+                    parts = token.split("-")
+                    if filter(lambda w: not w or d.check(w), parts) == parts:
+                        continue
+                if re.match("[+-][0-9]", token):
+                    continue
+                if re.match("hm+", token):
+                    continue
+                if re.match("a+[ur]*g+h*", token):
+                    continue
+                if re.match("(mu)?ha(ha)*", token):
+                    continue
+                if re.match("ah+", token):
+                    continue
+                if re.match("no+", token):
+                    continue
+                if re.match("no+", token):
+                    continue
+                if re.match("um+", token):
+                    continue
+                if re.match("aw+", token):
+                    continue
+                if re.match("o+h+", token):
+                    continue
+                print nav.whereami(), 'possible misspelling "%s"' % token
+        # Take exceptions from name, id, and type fields
+        if nav.element in ("name=", "id=", "type="):
+            (key, prefix, value, comment) = parse_attribute(nav.text)
+            value = string_strip(value)
+            if value:
+                d.add_to_session(value)
+                local_spellings.append(value)
+    #for word in local_spellings:
+    #    d.remove_from_session(word)
+
 vctypes = (".svn", ".git")
 
 def interesting(fn):
@@ -1355,101 +1453,7 @@
                     for fn in allcfgfiles(dir):
                         if verbose >= 2:
                             print fn + ":"
-                        # Accept declared spellings for this file
-                        # and for all directories above it.
-                        local_spellings = []
-                        up = fn
-                        while True:
-                            if not up or up == os.sep:
-                                break
-                            else:
-                                local_spellings += 
declared_spellings.get(up,[])
-                                up = os.path.dirname(up)
-                        map(d.add_to_session, local_spellings)
-                        for nav in WmlIterator(filename=fn):
-                            # Recognize local spelling exceptions
-                            if not nav.element and "#" in nav.text:
-                                comment = nav.text[nav.text.index("#")-1:]
-                                words = re.search("wmllint: local spellings? 
(.*)", comment)
-                                if words:
-                                    for word in words.group(1).split():
-                                        word = word.lower()
-                                        d.add_to_session(word)
-                                        local_spellings.append(word)
-                            # Spell-check message and story parts
-                            if nav.element in ("message=", "story=", 
"description="):
-                                (key, prefix, value, comment) = 
parse_attribute(nav.text)
-                                if "no spellcheck" in comment:
-                                    continue
-                                if value.startswith("_"):
-                                    value = value[1:].strip()
-                                value = string_strip(value)
-                                value = value.replace("...", " ")
-                                #value = value.replace("_ ", " ")
-                                #value = value.replace(" _", " ")
-                                value = value.replace("female^", " ")
-                                value = value.replace("male^", " ")
-                                if '<' in value:
-                                    value = 
re.sub("<[^>]+>text='([^']*)'<[^>]+>", r"\1", value)
-                                    value = re.sub("<[0-9,]+>", "", value)
-                                value = value.lower()
-                                value = re.sub(r'" *\+\s*_ *"', "", value)
-                                for token in value.split():
-                                    if d.check(token):
-                                        continue
-                                    while token and token[0] in " \t([EMAIL 
PROTECTED]'":
-                                        token = token[1:]
-                                    while token and token[-1] in "-*').,:;?!& 
\t":
-                                        token = token[:-1]
-                                    if token.startswith("$"):
-                                        continue
-                                    if token.startswith("%"):
-                                        continue
-                                    if token and token[0].isdigit():
-                                        continue
-                                    if not token:
-                                        continue
-                                    token = string_strip(token)
-                                    if token and d.check(token):
-                                        continue
-                                    elif token.endswith("'s") and 
d.check(token[:-2]):
-                                        continue
-                                    elif token.endswith("s'") and 
d.check(token[:-2]):
-                                        continue
-                                    if "-" in token:
-                                        parts = token.split("-")
-                                        if filter(lambda w: not w or 
d.check(w), parts) == parts:
-                                            continue
-                                    if re.match("[+-][0-9]", token):
-                                        continue
-                                    if re.match("hm+", token):
-                                        continue
-                                    if re.match("a+[ur]*g+h*", token):
-                                        continue
-                                    if re.match("(mu)?ha(ha)*", token):
-                                        continue
-                                    if re.match("ah+", token):
-                                        continue
-                                    if re.match("no+", token):
-                                        continue
-                                    if re.match("no+", token):
-                                        continue
-                                    if re.match("um+", token):
-                                        continue
-                                    if re.match("aw+", token):
-                                        continue
-                                    if re.match("o+h+", token):
-                                        continue
-                                    print nav.whereami(), 'possible 
misspelling "%s"' % token
-                            # Take exceptions from name, id, and type fields
-                            if nav.element in ("name=", "id=", "type="):
-                                (key, prefix, value, comment) = 
parse_attribute(nav.text)
-                                value = string_strip(value)
-                                if value:
-                                    d.add_to_session(value)
-                                    local_spellings.append(value)
-                        #for word in local_spellings:
-                        #    d.remove_from_session(word)
+                        spellcheck(fn, d)
             except ImportError:
                 sys.stderr.write("wmllint: spell check unavailable, install 
python-enchant to enable\n")
     except KeyboardInterrupt:


_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits

Reply via email to