]> git.saurik.com Git - cycript.git/blame_incremental - Filter.sh
Support initializing character array using string.
[cycript.git] / Filter.sh
... / ...
CommitLineData
1#!/usr/bin/env bash
2
3# Cycript - The Truly Universal Scripting Language
4# Copyright (C) 2009-2016 Jay Freeman (saurik)
5
6# GNU Affero General Public License, Version 3 {{{
7#
8# This program is free software: you can redistribute it and/or modify
9# it under the terms of the GNU Affero General Public License as published by
10# the Free Software Foundation, either version 3 of the License, or
11# (at your option) any later version.
12#
13# This program is distributed in the hope that it will be useful,
14# but WITHOUT ANY WARRANTY; without even the implied warranty of
15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16# GNU Affero General Public License for more details.
17#
18# You should have received a copy of the GNU Affero General Public License
19# along with this program. If not, see <http://www.gnu.org/licenses/>.
20# }}}
21
22file=$1
23shift
24
25filters=("$@")
26
27function include() {
28 file=$1
29 shift
30
31 dir=/${file}
32 dir=${dir%/*}
33 dir=${dir:-/.}
34 dir=${dir#/}
35 dir=${dir}/
36
37 while IFS= read -r line; do
38 if false; then :
39 elif [[ ${line} = @if* ]]; then
40 line=${line#@if }
41 for name in "${filters[@]}"; do
42 if [[ ${line} = ${name}' '* ]]; then
43 echo "${line#${name} }"
44 fi
45 done
46 elif [[ ${line} = @begin* ]]; then
47 set ${line}; shift
48 filter=
49 for name in "${filters[@]}"; do
50 for side in "$@"; do
51 if [[ ${name} == ${side} ]]; then
52 unset filter
53 fi
54 done
55 done
56 elif [[ ${line} = @else ]]; then
57 if [[ -z ${filter+@} ]]; then
58 unset filter
59 else
60 filter=
61 fi
62 elif [[ ${line} = @end ]]; then
63 unset filter
64 elif [[ ${line} = @include* ]]; then
65 line=${line#@include }
66 include "${dir}${line}"
67 elif [[ -z ${filter+@} ]]; then
68 echo "${line}"
69 fi
70 done <"${file}"
71}
72
73include "${file}"