]> git.saurik.com Git - cycript.git/blobdiff - Filter.sh
Port modules to typedef/extern instead of @encode.
[cycript.git] / Filter.sh
index 00dc10c89e4bf99a877fc3ce06bf5374a8892cc3..e3e47fcd738a4f14fe3a953ee3289e16996ff48f 100755 (executable)
--- a/Filter.sh
+++ b/Filter.sh
@@ -1,21 +1,73 @@
-#!/bin/bash
+#!/usr/bin/env bash
+
+# Cycript - The Truly Universal Scripting Language
+# Copyright (C) 2009-2016  Jay Freeman (saurik)
+
+# GNU Affero General Public License, Version 3 {{{
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+# }}}
+
+file=$1
+shift
 
 filters=("$@")
 
-while IFS= read -r line; do
-    if [[ ${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
-        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}"