X-Git-Url: https://git.saurik.com/cycript.git/blobdiff_plain/7056e6ee137056c14cf6a2ec31cf081c6d4fe45a..972562bf68a236b4580b6074415cbf4e07b0a0c6:/Filter.sh?ds=sidebyside diff --git a/Filter.sh b/Filter.sh index 7135d28..6e6bd93 100755 --- a/Filter.sh +++ b/Filter.sh @@ -1,21 +1,73 @@ #!/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 <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}"