X-Git-Url: https://git.saurik.com/cycript.git/blobdiff_plain/c1d3e52e58e86c49f9d04e06ae8e0ece4b98250c..6419a40fb7c8e1c92e2bb7a6691f071fbfa76e77:/Filter.sh diff --git a/Filter.sh b/Filter.sh index 6d8a4c5..e3e47fc 100755 --- a/Filter.sh +++ b/Filter.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash -# Cycript - Optimizing JavaScript Compiler/Runtime -# Copyright (C) 2009-2015 Jay Freeman (saurik) +# Cycript - The Truly Universal Scripting Language +# Copyright (C) 2009-2016 Jay Freeman (saurik) # GNU Affero General Public License, Version 3 {{{ # @@ -19,29 +19,55 @@ # along with this program. If not, see . # }}} +file=$1 +shift + 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 - 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}"