Add an AWK script to check maps for missing meta-data.
authorparasti <parasti@78b8d119-cf0a-0410-b17c-f493084dd1d7>
Mon, 17 Mar 2008 01:13:07 +0000 (01:13 +0000)
committerparasti <parasti@78b8d119-cf0a-0410-b17c-f493084dd1d7>
Mon, 17 Mar 2008 01:13:07 +0000 (01:13 +0000)
git-svn-id: https://s.snth.net/svn/neverball/trunk@1905 78b8d119-cf0a-0410-b17c-f493084dd1d7

scripts/check-levels.awk [new file with mode: 0644]
scripts/check-map-info.sh [deleted file]

diff --git a/scripts/check-levels.awk b/scripts/check-levels.awk
new file mode 100644 (file)
index 0000000..c88bb17
--- /dev/null
@@ -0,0 +1,87 @@
+# -----------------------------------------------------------------------------
+
+BEGIN {
+    required[1]  = "message"
+    required[2]  = "song"
+    required[3]  = "back"
+    required[4]  = "grad"
+    required[5]  = "shot"
+    required[6]  = "goal"
+    required[7]  = "time"
+    required[8]  = "time_hs"
+    required[9]  = "goal_hs"
+    required[10] = "coin_hs"
+    required[11] = "version"
+    required[12] = "author"
+}
+
+# -----------------------------------------------------------------------------
+
+# Fix up newlines.
+/\r$/ {
+    sub(/\r$/, "")
+}
+
+# -----------------------------------------------------------------------------
+
+# Entity open...
+!entity && /^\{/ {
+    entity = 1
+
+    for (key in attribs)
+        delete attribs[key]
+
+    next
+}
+
+entity && !brush && /^[[:space:]]*"[^"]*"[[:space:]]*"[^"]*"/ {
+    split($0, fields, "\"")
+
+    if (fields[2] == "classname" && fields[4] == "worldspawn")
+        seen_worldspawn = 1
+    else
+        attribs[fields[2]] = fields[4]
+}
+
+# Brush open...
+entity && /^\{/ {
+    brush = 1
+    next
+}
+
+# ...brush closed.
+brush && /^\}/ {
+    brush = 0
+    next
+}
+
+# ...entity closed.
+entity && /^\}/ {
+    entity = 0
+
+    # Dump worlspawn attribs.
+
+    if (seen_worldspawn)
+    {
+        missing = ""
+
+        for (i in required)
+        {
+            key = required[i]
+
+            if (!key in attribs || attribs[key] !~ /[^[:space:]]/)
+                missing = missing " " key
+        }
+
+        if (missing)
+            print FILENAME ":" missing
+
+        seen_worldspawn = 0
+
+        nextfile
+    }
+
+    next
+}
+
+# -----------------------------------------------------------------------------
diff --git a/scripts/check-map-info.sh b/scripts/check-map-info.sh
deleted file mode 100644 (file)
index bbddb3c..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/bin/sh
-
-LC_ALL=C
-export LC_ALL
-
-# Directories with Neverball levels
-path="data/map-easy data/map-fwp data/map-hard \
-data/map-medium data/map-mym data/map-mym2"
-
-# Mandatory level meta-data
-keys="message song shot goal time time_hs goal_hs coin_hs"
-
-for key in $keys; do
-    echo "Missing or empty \"$key\""
-    echo
-
-    {
-        # Missing...
-        find $path -name '*.map' |
-        xargs egrep -L '^"'$key'"' |
-        sed 's/^/    /'
-
-        # ...empty.
-        find $path -name '*.map' |
-        xargs egrep -l '^"'$key'"[[:space:]]+"[[:space:]]*"$' |
-        sed 's/^/    /'
-    } | sort
-
-    echo
-done
-