X-Git-Url: https://git.saurik.com/cycript.git/blobdiff_plain/4de0686f54039cd5211daebcf5a51ad475594170..7613908db708653c43cc3c2ca3defbfeb6b4fc6a:/Filter.sh diff --git a/Filter.sh b/Filter.sh index 00dc10c..e3e47fc 100755 --- 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 . +# }}} + +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}"