-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathbuildrng
executable file
·56 lines (50 loc) · 1.51 KB
/
buildrng
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#!/bin/sh
SPECS=$(ls -d *.*/index.page */*.*/index.page | sed -e 's/\/index\.page$//' | grep -v '^ducktype/')
while [ "$#" != "0" ]; do
if [ "x$1" = "x-o" ]; then
rng_outbase="$2"
shift
elif [ "x$1" = "x-v" ]; then
rng_verbose=1
fi
shift
done
if [ "x$rng_outbase" = "x" ]; then
rng_outbase=`pwd`
else
rng_outbase=`(cd "$rng_outbase" && pwd)`
fi
echo_verbose() {
if [ "x$rng_verbose" = "x1" ]; then
echo "$1"
fi
}
for spec in $SPECS; do
rng_outdir="$rng_outbase/$spec"
if echo "$spec" | grep -q "/"; then
rng_base=`echo "$spec" | cut -f1 -d/`
rng_version=`echo "$spec" | cut -f2 -d/`
else
rng_base="mallard"
rng_version="$spec"
fi
mkdir -p "$rng_outdir"
rng_rncfile="$rng_outdir/${rng_base}-${rng_version}.rnc"
rng_rngfile="$rng_outdir/${rng_base}-${rng_version}.rng"
rng_tmpfile="$rng_outdir/${rng_base}-${rng_version}.rng.tmp"
echo_verbose "Creating $rng_rncfile"
for page in $(./linear.sh "$spec"); do
xsltproc --xinclude mal2rnc.xsl "${spec}/${page}.page"
done > "$rng_rncfile"
echo_verbose "Creating $rng_rngfile"
LANG= awk -f rnc2rng.awk "$rng_rncfile" > "$rng_tmpfile" || (rm -f "$rng_tmpfile" && exit 1)
xmllint --format "$rng_tmpfile" | \
sed -e 's/^ //' \
-e 's/^\(<start.*>\)/\n\1/' \
-e 's/^\(<define.*>\)/\n\1/' \
-e 's/^\(<!--\)/\n\1/' \
-e 's/^<\/grammar>/\n<\/grammar>/' \
-e 's/ xmlns/\n xmlns/g' \
-e 's/" ns=/"\n ns=/' \
> "$rng_rngfile" || (rm -f "$rng_tmpfile" && exit 1) && rm -f "$rng_tmpfile"
done