summaryrefslogtreecommitdiff
path: root/web/pwebmac/makeall
blob: 22e4f4662e00a8f5c315501fc8b712a2996099b6 (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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#!/bin/sh

LONGOPTS=changes,new,pdftocfront,tex:
SHRTOPTS=cnpt:

CHANGES=false
NEW=false
PDFTOCFRONT=false
TEX=tex

getopt -T >/dev/null

if [ $? -eq 4 ] # Check for Linux-getopt with extensions
then OPTS=$(getopt -n downloadable-programs -o $SHRTOPTS -l $LONGOPTS -- "$@")
else OPTS=$(getopt $SHRTOPTS $*)
fi

if [ $? -eq 0 ] # Check return code from getopt
then eval set -- "$OPTS"
else echo "Failed to parse options." >&2; exit 1
fi

while true
do
	case "$1" in
		-c | --changes ) CHANGES=true; shift ;;
		-n | --new ) NEW=true; export TEXINPUTS=".:/opt/github/web//:"
			shift ;;
		-p | --pdftocfront ) PDFTOCFRONT=true; shift ;;
		-t | --tex ) TEX="$2"; shift 2 ;;
		-- ) shift; break ;;
		* ) break ;;
	esac
done

KNUTHWHERE=$(locate /bibtex.web)
KNUTHWARE=$(dirname $KNUTHWHERE)

for f in \
	$KNUTHWARE/*.web \
	$KNUTHWARE/pdftexdir/pdftex.web \
	$KNUTHWARE/xetexdir/xetex.web
do
	if $CHANGES
	then
		c=$(basename $f .web).ch
		case $c in
			"pdftex.ch"|"xetex.ch" )
				c=$KNUTHWARE/$c
				c=$(echo $c | sed -e 's?\(texk/\)?Work/\1?') ;;
			* ) c=$KNUTHWARE/$c ;;
		esac
		weave $f $c
		sed -i -e "s/\(\\\\let\\\\maybe=\)\\\\iftrue/\1\\\\iffalse/" \
			$(basename $f .web).tex
	else
		weave $f
	fi

	f=$(basename $f .web)

	# use extended macros for TeX Live PDF documentation
	if $NEW
	then
		sed -i -e "1 s/\\\\input webmac/\\\\input pwebmac/" $f.tex
	fi

	# replace former convention to indicate "not a title page"
	# to include page headers for table-of-contents
	sed -i -e "s/\\\\def\\\\titlepage{F}/\\\\titlefalse/" $f.tex

	# special treatment for individual WEB programs
	case $f in
		# purge conflict between bibtex.web and webmac.tex
		# 'E' no longer free to be active character
		# fix table-of-contents page for bibtex
		"bibtex") sed -i -e "s/titlefalse/titletrue/" \
			-e "70,77d" $f.tex ;;

		# make room for new material in weave.web
		"tangle" ) sed -i -e "s/number{123}/number{125}/" $f.tex ;;

		# amend '\N' redefinition for PDF outlines in mf.tex and
		# tex.tex (also pdftex.web and xetex.web); depends on the
		# extended 'pwebmac.tex' macros
		"mf"|"tex"|"pdftex"|"xetex" )
			if [ "xetex" = $f ]
			then
				# purge obsolete macros from XeTeX
				sed -i -e "/\\\\input xewebmac/d" $f.tex
				# only XeTeX can process XeTeX
				TEX=xetex
			fi
			if $NEW
			then
				if [ "pdftex" = $f ]
				then
					# pdfTeX has a looong table-of-contents
					cat > pdftex.patch << FI
  \advance\vsize by 4\baselineskip
  \ifacro\advance\pdfpageheight by 4\baselineskip\fi
FI
					sed -i -e "/\\\\def\\\\topofcontents.*/ {
						r pdftex.patch
						}"  $f.tex
				fi
				cat > texmf-pdf.patch << FI
  \ifacro{\toksF={}\makeoutlinetoks{[#2] #3}\outlinedone\outlinedone}\fi
FI
				sed -i -e "/\\\\outer\\\\def\\\\N.*/ {
					r texmf-pdf.patch
					}" $f.tex
				cat > texmf-pdf.patch << FI
  \ifpdf\special{pdf: outline 0 << /Title (\the\toksE) /Dest
    [ @thispage /FitH @ypos ] >>}\fi
FI
				sed -i -e "/  \\\\edef\\\\next.*/ {
					r texmf-pdf.patch
					}" $f.tex
				rm texmf-pdf.patch
			fi ;;
	esac

	if $PDFTOCFRONT
	then
		# shift table-of-contents pages to the front in PDF
		export TEXINPUTS=".:/opt/github/cwebbin//:"$TEXINPUTS
		sed -i -e "1 s/\(webmac\)/\1\n\\\\input pdfwebtocfront/" $f.tex
		$TEX $f.tex # run TeX twice
	fi

	$TEX $f
done

if $PDFTOCFRONT
then
	# create tarballs for publication
	pax vftovp.pdf vptovf.pdf -wvzf etc.tar.gz -s ,^,etc/,
	pax mf.pdf -wvzf mf.tar.gz -s ,^,mf/,
	pax gftodvi.pdf gftopk.pdf gftype.pdf mft.pdf \
		-wvzf mfware.tar.gz -s ,^,mfware/,
	pax tex.pdf -wvzf tex.tar.gz -s ,^,tex/,
	pax dvitype.pdf pltotf.pdf pooltype.pdf tftopl.pdf \
		-wvzf texware.tar.gz -s ,^,texware/,
	pax tangle.pdf weave.pdf -wvzf web.tar.gz -s ,^,web/,
	pax bibtex.pdf -wvzf bibtex.tar.gz -s ,^,bibtex/,
	pax dvicopy.pdf patgen.pdf pktogf.pdf pktype.pdf \
		-wvzf other.tar.gz -s ,^,other/,
	pax pdftex.pdf -wvzf pdftex.tar.gz -s ,^,pdftex/,
	pax xetex.pdf -wvzf xetex.tar.gz -s ,^,xetex/,
fi