]> git.saurik.com Git - cycript.git/blobdiff - Filter.sh
Port modules to typedef/extern instead of @encode.
[cycript.git] / Filter.sh
index e44c725dc1ca9a48fc1063a85e621e658508cf42..e3e47fcd738a4f14fe3a953ee3289e16996ff48f 100755 (executable)
--- a/Filter.sh
+++ b/Filter.sh
@@ -1,7 +1,7 @@
 #!/usr/bin/env bash
 
 #!/usr/bin/env bash
 
-# Cycript - Optimizing JavaScript Compiler/Runtime
-# Copyright (C) 2009-2014  Jay Freeman (saurik)
+# Cycript - The Truly Universal Scripting Language
+# Copyright (C) 2009-2016  Jay Freeman (saurik)
 
 # GNU Affero General Public License, Version 3 {{{
 #
 
 # GNU Affero General Public License, Version 3 {{{
 #
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 # }}}
 
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 # }}}
 
+file=$1
+shift
+
 filters=("$@")
 
 filters=("$@")
 
-while IFS= read -r line; do
-    if [[ ${line} = @if* ]]; then
-        line=${line#@if }
-        for name in "${filters[@]}"; do
-            if [[ ${line} = ${name}' '* ]]; then
-                echo "${line#${name} }"
-            fi
-        done
-    elif [[ ${line} = @begin* ]]; then
-        set ${line}; shift
-        filter=
-        for name in "${filters[@]}"; do
-            for side in "$@"; do
-                if [[ ${name} == ${side} ]]; then
-                    unset filter
+function include() {
+    file=$1
+    shift
+
+    dir=/${file}
+    dir=${dir%/*}
+    dir=${dir:-/.}
+    dir=${dir#/}
+    dir=${dir}/
+
+    while IFS= read -r line; do
+        if false; then :
+        elif [[ ${line} = @if* ]]; then
+            line=${line#@if }
+            for name in "${filters[@]}"; do
+                if [[ ${line} = ${name}' '* ]]; then
+                    echo "${line#${name} }"
                 fi
             done
                 fi
             done
-        done
-    elif [[ ${line} = @end ]]; then
-        unset filter
-    elif [[ -z ${filter+@} ]]; then
-        echo "${line}"
-    fi
-done
+        elif [[ ${line} = @begin* ]]; then
+            set ${line}; shift
+            filter=
+            for name in "${filters[@]}"; do
+                for side in "$@"; do
+                    if [[ ${name} == ${side} ]]; then
+                        unset filter
+                    fi
+                done
+            done
+        elif [[ ${line} = @else ]]; then
+            if [[ -z ${filter+@} ]]; then
+                unset filter
+            else
+                filter=
+            fi
+        elif [[ ${line} = @end ]]; then
+            unset filter
+        elif [[ ${line} = @include* ]]; then
+            line=${line#@include }
+            include "${dir}${line}"
+        elif [[ -z ${filter+@} ]]; then
+            echo "${line}"
+        fi
+    done <"${file}"
+}
+
+include "${file}"