Rev 3 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
2 | pj | 1 | ## Lout output |
2 | # Copyright (C) 1993-1995 Ian Jackson. |
||
3 | |||
4 | # This file is free software; you can redistribute it and/or modify |
||
5 | # it under the terms of the GNU General Public License as published by |
||
6 | # the Free Software Foundation; either version 2, or (at your option) |
||
7 | # any later version. |
||
8 | |||
9 | # It is distributed in the hope that it will be useful, |
||
10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of |
||
11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||
12 | # GNU General Public License for more details. |
||
13 | |||
14 | # You should have received a copy of the GNU General Public License |
||
15 | # along with GNU Emacs; see the file COPYING. If not, write to |
||
16 | # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
||
17 | # Boston, MA 02111-1307, USA. |
||
18 | |||
19 | # (Note: I do not consider works produced using these BFNN processing |
||
20 | # tools to be derivative works of the tools, so they are NOT covered |
||
21 | # by the GPL. However, I would appreciate it if you credited me if |
||
22 | # appropriate in any documents you format using BFNN.) |
||
23 | |||
24 | sub lout_init { |
||
25 | open(LOUT,">$prefix.lout"); |
||
26 | chop($dprint= `date '+%d %B %Y'`); |
||
27 | $dprint =~ s/^0//; |
||
28 | } |
||
29 | |||
30 | sub lout_startup { |
||
31 | local ($lbs) = &lout_sanitise($user_brieftitle); |
||
32 | print LOUT <<END; |
||
33 | \@SysInclude{ fontdefs } |
||
34 | \@SysInclude{ langdefs } |
||
35 | \@SysInclude{ dl } |
||
36 | \@SysInclude{ docf } |
||
37 | \@Use { \@DocumentLayout |
||
38 | \@OddTop { \@Null } |
||
39 | \@EvenTop { \@Null } |
||
40 | \@StartOddTop { \@Null } |
||
41 | \@StartEvenTop { \@Null } |
||
42 | \@OddFoot { { $lbs } \@Centre{ - \@PageNum - } \@Right{ $dprint } } |
||
43 | \@EvenFoot { { $lbs } \@Centre{ - \@PageNum - } \@Right{ $dprint } } |
||
44 | \@StartOddFoot { { $lbs } \@Centre{ - \@PageNum - } \@Right{ $dprint } } |
||
45 | \@StartEvenFoot { { $lbs } \@Centre{ - \@PageNum - } \@Right{ $dprint } } |
||
46 | \@ParaGap { 1.70vx } |
||
47 | \@InitialBreak { 1.0fx ragged hyphen } |
||
48 | } |
||
49 | \@Use { \@OrdinaryLayout } |
||
50 | END |
||
51 | $lout_textstatus= 'p'; |
||
52 | } |
||
53 | |||
54 | sub lout_pageref { |
||
55 | print LOUT "Q$_[1] (page {\@PageOf{$_[0]}}) "; |
||
56 | &lout_text("\`"); |
||
57 | } |
||
58 | |||
59 | sub lout_endpageref { |
||
60 | &lout_text("'"); |
||
61 | } |
||
62 | |||
63 | sub lout_finish { |
||
64 | print LOUT "\@End \@Text\n"; |
||
65 | close(L); |
||
66 | } |
||
67 | |||
68 | sub lout_startmajorheading { |
||
69 | $lout_styles .= 'h'; |
||
70 | print LOUT <<END |
||
71 | \@CNP |
||
72 | { |
||
73 | newpath 0 ysize 0.3 ft sub moveto |
||
74 | xsize 0 rlineto |
||
75 | |||
76 | xsize neg 0 rlineto |
||
77 | closepath fill |
||
78 | } \@Graphic { //1.6f \@HAdjust \@Heading{ |
||
79 | END |
||
80 | ; |
||
81 | $endh= "}\n{\@PageMark s_$_[0]}\n/1.0fo\n"; |
||
82 | &lout_text($_[0] ? "Section $_[0]. " : ''); |
||
83 | } |
||
84 | |||
85 | sub lout_startminorheading { |
||
86 | $lout_styles .= 'h'; |
||
87 | print LOUT "//0.2f \@CNP {\@PageMark $_[0]} \@Heading{\n"; |
||
88 | $endh= ''; |
||
89 | } |
||
90 | |||
91 | sub lout_endheading { |
||
92 | $lout_styles =~ s/.$//; print LOUT "}\n$endh"; |
||
93 | $lout_status= 'p'; |
||
94 | } |
||
95 | |||
96 | sub lout_endmajorheading { &lout_endheading(@_); } |
||
97 | sub lout_endminorheading { &lout_endheading(@_); } |
||
98 | |||
99 | sub lout_courier { |
||
100 | $lout_styles .= 'f'; |
||
101 | print LOUT "{{0.7 1.0} \@Scale {Courier Bold} \@Font {"; |
||
102 | } |
||
103 | |||
104 | sub lout_endcourier { |
||
105 | $lout_styles =~ s/.$//; print LOUT "}}"; |
||
106 | } |
||
107 | |||
108 | sub lout_italic { $lout_styles .= 'f'; print LOUT "{Slope \@Font {"; } |
||
109 | sub lout_enditalic { $lout_styles =~ s/.$//; print LOUT "}}"; } |
||
110 | |||
111 | sub lout_startindent { $lout_styles .= 'i'; print LOUT "\@IndentedDisplay {\n"; } |
||
112 | |||
113 | sub lout_endindent { |
||
114 | &lout_endpara; |
||
115 | $lout_styles =~ s/.$//; print LOUT "}\n\@LP\n"; |
||
116 | } |
||
117 | |||
118 | sub lout_startpackedlist { $lout_plc=-1; } |
||
119 | sub lout_endpackedlist { &lout_newline if !$lout_plc; } |
||
120 | sub lout_packeditem { |
||
121 | &lout_newline if !$lout_plc; |
||
122 | &lout_tab(($lout_plc>0)*40+5); |
||
123 | $lout_plc= !$lout_plc; |
||
124 | } |
||
125 | |||
126 | sub lout_startlist { |
||
127 | &lout_endpara; |
||
128 | print LOUT "\@RawIndentedList style {\@Bullet} indent {0.5i} gap {1.1vx}\n"; |
||
129 | $lout_styles .= 'l'; |
||
130 | $lout_status= ''; |
||
131 | } |
||
132 | |||
133 | sub lout_endlist { |
||
134 | &lout_endpara; |
||
135 | print LOUT "\@EndList\n\n"; |
||
136 | $lout_styles =~ s/.$//; |
||
137 | } |
||
138 | |||
139 | sub lout_item { |
||
140 | &lout_endpara; |
||
141 | print LOUT "\@ListItem{"; |
||
142 | $lout_styles.= 'I'; |
||
143 | } |
||
144 | |||
145 | sub lout_startindex { |
||
146 | print LOUT "//0.0fe\n"; |
||
147 | } |
||
148 | |||
149 | sub lout_endindex { |
||
150 | $lout_status='p'; |
||
151 | } |
||
152 | |||
153 | sub lout_startindexmainitem { |
||
154 | $lout_marker= $_[0]; |
||
155 | $lout_status= ''; |
||
156 | print LOUT "//0.3vx Bold \@Font \@HAdjust { \@HContract { { $_[1] } |3cx {"; |
||
157 | $lout_iiendheight= '1.00'; |
||
158 | $lout_styles .= 'X'; |
||
159 | } |
||
160 | |||
161 | sub lout_startindexitem { |
||
162 | $lout_marker= $_[0]; |
||
163 | print LOUT "\@HAdjust { \@HContract { { $_[1] } |3cx {"; |
||
164 | $lout_iiendheight= '0.95'; |
||
165 | $lout_styles .= 'X'; |
||
166 | } |
||
167 | |||
168 | sub lout_endindexitem { |
||
169 | print LOUT "} } |0c \@PageOf { $lout_marker } } //${lout_iiendheight}vx\n"; |
||
170 | $lout_styles =~ s/.$//; |
||
171 | } |
||
172 | |||
173 | sub lout_email { &lout_courier; &lout_text('<'); } |
||
174 | sub lout_endemail { &lout_text('>'); &lout_endcourier; } |
||
175 | |||
176 | sub lout_ftpon { &lout_courier; } sub lout_endftpon { &lout_endcourier; } |
||
177 | sub lout_ftpin { &lout_courier; } sub lout_endftpin { &lout_endcourier; } |
||
178 | sub lout_docref { } sub lout_enddocref { } |
||
179 | sub lout_ftpsilent { $lout_ignore++; } |
||
180 | sub lout_endftpsilent { $lout_ignore--; } |
||
181 | |||
182 | sub lout_newsgroup { &lout_courier; } |
||
183 | sub lout_endnewsgroup { &lout_endcourier; } |
||
184 | |||
185 | sub lout_text { |
||
186 | return if $lout_ignore; |
||
187 | $lout_status= 'p'; |
||
188 | $_= &lout_sanitise($_[0]); |
||
189 | s/ $/\n/ unless $lout_styles =~ m/[fhX]/; |
||
190 | print LOUT $_; |
||
191 | } |
||
192 | |||
193 | sub lout_tab { |
||
194 | local ($size) = $_[0]*0.5; |
||
195 | print LOUT " |${size}ft "; |
||
196 | } |
||
197 | |||
198 | sub lout_newline { |
||
199 | print LOUT " //1.0vx\n"; |
||
200 | } |
||
201 | |||
202 | sub lout_sanitise { |
||
203 | local ($in) = @_; |
||
204 | local ($out); |
||
205 | $in= ' '.$in.' '; |
||
206 | $out=''; |
||
207 | while ($in =~ m/(\s)(\S*[\@\/|\\\"\^\&\{\}\#]\S*)(\s)/) { |
||
208 | $out .= $`.$1; |
||
209 | $in = $3.$'; |
||
210 | $_= $2; |
||
211 | s/[\\\"]/\\$&/g; |
||
212 | $out .= '"'.$_.'"'; |
||
213 | } |
||
214 | $out .= $in; |
||
215 | $out =~ s/^ //; $out =~ s/ $//; |
||
216 | $out; |
||
217 | } |
||
218 | |||
219 | sub lout_endpara { |
||
220 | return if $lout_status eq ''; |
||
221 | if ($lout_styles eq '') { |
||
222 | print LOUT "\@LP\n\n"; |
||
223 | } elsif ($lout_styles =~ s/I$//) { |
||
224 | print LOUT "}\n"; |
||
225 | } |
||
226 | $lout_status= ''; |
||
227 | } |
||
228 | |||
229 | sub lout_startverbatim { |
||
230 | print LOUT "//0.4f\n\@RawIndentedDisplay lines \@Break". |
||
231 | " { {0.7 1.0} \@Scale {Courier Bold} \@Font {\n"; |
||
232 | } |
||
233 | |||
234 | sub lout_verbatim { |
||
235 | $_= $_[0]; |
||
236 | s/^\s*//; |
||
237 | print LOUT &lout_sanitise($_),"\n"; |
||
238 | } |
||
239 | |||
240 | sub lout_endverbatim { print LOUT "}\n}\n//0.4f\n"; } |
||
241 | |||
242 | 1; |