Author: esr
Date: Sun Apr 29 23:56:57 2007
New Revision: 17175

URL: http://svn.gna.org/viewcvs/wesnoth?rev=17175&view=rev
Log:
upconvert now translates terrain_likes clauses.

Modified:
    trunk/data/tools/upconvert

Modified: trunk/data/tools/upconvert
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/data/tools/upconvert?rev=17175&r1=17174&r2=17175&view=diff
==============================================================================
--- trunk/data/tools/upconvert (original)
+++ trunk/data/tools/upconvert Sun Apr 29 23:56:57 2007
@@ -7,6 +7,9 @@
 # All conversion logic for lifting WML and maps from older versions of the
 # markup to newer ones should live here.  This includes resource path changes
 # and renames, also map format conversions.
+#
+# Takes any number of directories as arguments.  Each directory is converted.
+# If no directiories are specified, acts on the current directory.
 #
 # The recommended procedure is this:
 # 1. Run it with --dryrun first to see what it will do.
@@ -20,9 +23,10 @@
 #    undo the conversion.
 #
 # This script presently makes no effort to fix terrain codes outside of maps,
-# e.g. in terrain filters. It will barf on maps with custom terrains.
-
-import sys, os, re, getopt
+# e.g. in terrain filters, except that it does handle terrain_liked.
+# It will barf on maps with custom terrains.
+
+import sys, os, re, getopt, curses.ascii
 
 filemoves = {
     # Older includes all previous to 1.3.1.
@@ -586,9 +590,25 @@
     def texttransform(filename, lineno, line):
         "Resource-name transformation on text lines."
         transformed = line
+        # First, do resource-file moves
         for step in fileconversions:
             for (old, new) in step:
                 transformed = transformed.replace(old, new)
+        # Now, handle terrain-liked=
+        if "terrain_liked=" in transformed:
+            (pre, terrain) = transformed.split("=")
+            newterrains = []
+            post = ""
+            for c in terrain:
+                if c in conversion1:
+                    newterrains.append(conversion1[c])
+                elif curses.ascii.isspace(c):
+                    post += c
+                else:
+                    print "%s, line %d: custom terrain %s ignored." \
+                          (filename, lineno+1, c)
+            transformed = pre + "=" + ",".join(newterrains) + post
+        # Report the changes
         if verbose > 0 and transformed != line:
             msg = "%s, line %d: %s -> %s" % \
                   (filename, lineno+1, line.strip(), transformed.strip())
@@ -602,45 +622,48 @@
     else:
         maptransform = maptransform1
 
-    # Perform resource file substitutions
-    ofp = None
-    for fn in allcfgfiles("."):
-        if verbose >= 3:
-            print fn + ":"
-        backup = fn + "-bak"
-        if clean or revert:
-            # Do housekeeping
-            if os.path.exists(backup):
-                if clean:
-                    print "upconvert: removing %s" % backup
-                    if not dryrun:
-                        os.remove(backup)
-                elif revert:
-                    print "upconvert: reverting %s" % backup
-                    if not dryrun:
-                        os.rename(backup, fn)
-        elif diffs:
-            # Display diffs
-            if os.path.exists(backup):
-                print fn
-                os.system("diff -u %s %s" % (backup, fn))
-        else:
-            # Do file conversions
-            try:
-                changed = translator(fn, maptransform, texttransform)
-                if changed:
-                    print "upconvert: converting", fn
-                    if not dryrun:
-                        os.rename(fn, backup)
-                        ofp = open(fn, "w")
-                        ofp.write(changed)
-                        ofp.close()
-            except maptransform_error, e:
-                if e.level <= verbose:
-                    sys.stderr.write("upconvert: " + `e` + "\n")
-            except:
-                sys.stderr.write("upconvert: internal error on %s\n" % fn)
-                (exc_type, exc_value, exc_traceback) = sys.exc_info()
-                raise exc_type, exc_value, exc_traceback
+    if not arguments:
+        arguments = ["."]
+
+    for dir in arguments:
+        ofp = None
+        for fn in allcfgfiles(dir):
+            if verbose >= 3:
+                print fn + ":"
+            backup = fn + "-bak"
+            if clean or revert:
+                # Do housekeeping
+                if os.path.exists(backup):
+                    if clean:
+                        print "upconvert: removing %s" % backup
+                        if not dryrun:
+                            os.remove(backup)
+                    elif revert:
+                        print "upconvert: reverting %s" % backup
+                        if not dryrun:
+                            os.rename(backup, fn)
+            elif diffs:
+                # Display diffs
+                if os.path.exists(backup):
+                    print fn
+                    os.system("diff -u %s %s" % (backup, fn))
+            else:
+                # Do file conversions
+                try:
+                    changed = translator(fn, maptransform, texttransform)
+                    if changed:
+                        print "upconvert: converting", fn
+                        if not dryrun:
+                            os.rename(fn, backup)
+                            ofp = open(fn, "w")
+                            ofp.write(changed)
+                            ofp.close()
+                except maptransform_error, e:
+                    if e.level <= verbose:
+                        sys.stderr.write("upconvert: " + `e` + "\n")
+                except:
+                    sys.stderr.write("upconvert: internal error on %s\n" % fn)
+                    (exc_type, exc_value, exc_traceback) = sys.exc_info()
+                    raise exc_type, exc_value, exc_traceback
 
 # upconvert ends here


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

Reply via email to