]>
Commit | Line | Data |
---|---|---|
e3f9e20c VS |
1 | #!/bin/sh |
2 | ############################################################################# | |
3 | # Name: splice | |
4 | # Purpose: Splice a marked section of regcustom.h into regex.h | |
5 | # Author: Mike Wetherell | |
e3f9e20c VS |
6 | # Copyright: (c) 2004 Mike Wetherell |
7 | # Licence: wxWindows licence | |
8 | ############################################################################# | |
9 | ||
10 | # | |
11 | # Works by greping for the marks then passing their line numbers to sed. Which | |
12 | # is slighly the long way round, but allows some error checking. | |
13 | # | |
14 | ||
15 | SRC=regcustom.h | |
16 | DST=regex.h | |
17 | MARK1='^/\* --- begin --- \*/$' | |
18 | MARK2='^/\* --- end --- \*/$' | |
19 | PROG=`basename $0` | |
20 | TMP=$DST.tmp | |
21 | ||
22 | # findline(pattern, file) | |
23 | # Prints the line number of the 1st line matching the pattern in the file | |
24 | # | |
25 | findline() { | |
26 | if ! LINE=`grep -n -- "$1" "$2"`; then | |
27 | echo "$PROG: marker '$1' not found in '$2'" >&2 | |
28 | return 1 | |
29 | fi | |
30 | echo $LINE | sed -n '1s/[^0-9].*//p' # take just the line number | |
31 | } | |
32 | ||
33 | # findmarkers([out] line1, [out] line2, pattern1, pattern2, file) | |
34 | # Returns (via the variables named in the 1st two parameters) the line | |
35 | # numbers of the lines matching the patterns in file. Checks pattern1 comes | |
36 | # before pattern2. | |
37 | # | |
38 | findmarkers() { | |
39 | if ! LINE1=`findline "$3" "$5"` || ! LINE2=`findline "$4" "$5"`; then | |
40 | return 1 | |
41 | fi | |
42 | if [ $LINE1 -ge $LINE2 ]; then | |
43 | echo "$PROG: marker '$3' not before '$4' in '$5'" >&2 | |
44 | return 1 | |
45 | fi | |
46 | eval $1=$LINE1 | |
47 | eval $2=$LINE2 | |
48 | } | |
49 | ||
50 | # find markers | |
51 | # | |
52 | if findmarkers SRCLINE1 SRCLINE2 "$MARK1" "$MARK2" $SRC && | |
53 | findmarkers DSTLINE1 DSTLINE2 "$MARK1" "$MARK2" $DST | |
54 | then | |
55 | # do splice | |
56 | # | |
57 | if (sed $DSTLINE1,\$d $DST && | |
58 | sed -n $SRCLINE1,${SRCLINE2}p $SRC && | |
59 | sed 1,${DSTLINE2}d $DST) > $TMP | |
60 | then | |
61 | mv $TMP $DST | |
62 | exit 0 | |
63 | else | |
64 | rm $TMP | |
65 | fi | |
66 | fi | |
67 | ||
68 | exit 1 |