X-Git-Url: https://git.saurik.com/cycript.git/blobdiff_plain/be36c292cf875904599e45d49e4f8b2f8b4e9ca6..51b2dc6b0c969f9297c8464cb91e93d65819e0ae:/Filter.sh diff --git a/Filter.sh b/Filter.sh index bb76b0a..35a1542 100755 --- a/Filter.sh +++ b/Filter.sh @@ -1,28 +1,67 @@ #!/usr/bin/env bash +# Cycript - Optimizing JavaScript Compiler/Runtime +# Copyright (C) 2009-2015 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 . +# }}} + +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} = @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}"