blob: 8af5ebe6434859ae6039640aad02c6421456ceba (
plain)
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
#!/bin/sh
# (This file is public domain.)
help ()
{
cat <<EOF
Usage: trimsee [-i IS] [-o OS] [-s SEE]
trimsee {-h|--help|-v|--version}
Remove commas (or other page list separators) in front
of see / see also commands in the output of MakeIndex.
Input is read from stdin, output is directed to stdout.
-i IS use IS as a regular expression matching separator
in front of see / see also commands in the input
(default: '$DEFAULT_IS')
-o OS use OS as a separator to replace IS in front of
see / see also commands (default: '$DEFAULT_OS')
-s SEE use SEE as a regular expression matching see /
see also commands (default: '$DEFAULT_SEE')
-h, --help show this help message
-v, --version show version
EOF
}
check_missing_arg ()
{
if (( $1 < 2 )); then
echo "Missing argument to option '$2'" 1>&2
exit 1
fi
}
VERSION='0.1'
DEFAULT_SEE='\\indexsee'
DEFAULT_IS=', \+'
DEFAULT_OS=' '
SEE=$DEFAULT_SEE
IS=$DEFAULT_IS
OS=$DEFAULT_OS
while [ $# != 0 ]
do
case "$1" in
-i)
check_missing_arg $# "$1"
IS=$2
shift
;;
-o)
check_missing_arg $# "$1"
OS=$2
shift
;;
-s)
check_missing_arg $# "$1"
SEE=$2
shift
;;
-h | --help)
help
exit 0
;;
-v | --version)
echo "trimsee version $VERSION"
exit 0
;;
*)
echo "Unknown option '$1'" 1>&2
exit 1
;;
esac
shift
done
# The idea is to implement line output delayed by one line. When we
# read next line, we check if it starts with a see/see also entry, and
# if it does, we remove the comma at the end of the previous line
# before printing it. We keep previous lines in the hold buffer.
sed -n '
# Remove all commas in front of see/see also inside each line.
s/'"$IS$SEE/$OS$SEE"'/g
# If this line does not start with see/see also, we will print the
# previous line intact. NOTE: There are two characters inside the
# brackets: a space and a tab.
/^[ ]*'"$SEE"'/! { x; b PRINT; }
# This line starts with see/see also, so remove comma at the end of
# the previous line before we print it.
x
s/'"$IS"'$/'"$OS"'/
# Print the previous line.
:PRINT
1! p
# At the end of the input, print the last line.
$ { x; p; }
'
|