|
|
1.1 root 1: |include(list.h)
2: |include(macro.h)
3: |include(style.h)
4:
5: |attribute(page.offset; init 0;
6: $ [
7: '\" O current page offset
8: '\" On page offset for column n
9: . po $
10: . nr O \n(.o
11: . nr O0 \n(.o
12: ])
13:
14: |attribute(line.length; init 6i;
15: $ [
16: '\" W current page width
17: '\" Wn page width for column n
18: . ll $
19: . lt $
20: . nr W \n(.lu
21: ])
22:
23: |attribute(page.length; init 11i;
24: $ [
25: . pl $
26: ])
27:
28: |attribute(spacing; init off;
29: on [
30: . rs
31: ] off [
32: . ns
33: ])
34:
35: |attribute(new.page; nostack;
36: [
37: . bp
38: ] odd [
39: '\" ;P page number register TEMP
40: . bp
41: . af ;P \g'page_counter' \" save format of page_counter
42: . af page_counter 1 \" normal format for next line
43: . nr ;P \n'page_counter' \" must use different name for P
44: . af page_counter \g(;P \" restore format to P
45: . af ;P 1 \" normal format for control register
46: . if !\n(;P%2 \{\
47: . rs
48: . bp \}
49: . rr ;P \" free storage
50: ] even [
51: '\" ;P page number register TEMP
52: . bp
53: . af ;P \g'page_counter' \" save format of page_counter
54: . af page_counter 1 \" normal format for next line
55: . nr ;P \n'page_counter' \" must use different name for P
56: . af page_counter \g(;P \" restore format to P
57: . af ;P 1 \" normal format for control register
58: . if \n(;P%2 \{\
59: . rs
60: . bp \}
61: . rr ;P \" free storage
62: ])
63:
64: |attribute(line.spacing; stack, init 1;
65: $ [
66: . ls $
67: ])
68:
69: |attribute(blank.lines; nostack;
70: $ [
71: . sp $
72: . ti \n(.iu \" movement resets indentation
73: ] [
74: . sp 1
75: . ti \n(.iu \" movement resets indentation
76: ])
77:
78: |attribute(minimum.lines; nostack;
79: $ [
80: '\" minimum space mechanism
81: '\" :B amount of accumulated blank space
82: '\" :D amount of accumulated blank space in diversion
83: '\" :E position of last minimum space in diversion
84: '\" :N position of last minimum space
85: '\" }D name of last minimum space diversion
86: '\" ;4 amount to space TEMP
87: . br
88: '\" when in a diversion, use .d (rather than nl) for position
89: '\" careful--space might occur at the same
90: '\" position BUT in a different named diversion
91: '\" (hence, the use of the string }D)
92: '\" bug still might be possible, if the same named diversion
93: '\" is used, that a space might occur in the same vertical place.
94: '\" very unlikely for
95: '\" a) monk will remove :D and :E when not in a diversion
96: '\" b) tbl generates unique names
97: . ie !'\n(.z'' \{\
98: . if !'\n(.z'\*(}D' .rr :D :E
99: . nr ;4 $v
100: . if !(\n(.d=\n(:D) .nr :E 0 \" different place for sure
101: . nr ;4 -\n(:Eu \" remove previous accumulation, if any
102: . if \n(;4 \{\
103: . sp \n(;4u
104: . nr :E +\n(;4u \}
105: . rm ;4
106: . ds }D \n(.z
107: . nr :D \n(.d \}
108: . el \{\
109: . rr :D :E \" remove the in-diversion registers
110: . nr ;4 $v
111: . if !(\n(nl=\n(:N) .nr :B 0 \" different place for sure
112: . nr ;4 -\n(:Bu \" remove previous accumulation, if any
113: . if \n(;4 \{\
114: . sp \n(;4u \" space and recompute accumulation
115: . nr :B +\n(;4u \}
116: . rm ;4
117: . nr :N \n(nl \}
118: . ti \n(.iu \" movement resets indentation
119: ] [
120: '\" minimum space mechanism
121: '\" :B amount of accumulated blank space
122: '\" :D amount of accumulated blank space in diversion
123: '\" :E position of last minimum space in diversion
124: '\" :N position of last minimum space
125: '\" }D name of last minimum space diversion
126: '\" ;4 amount to space TEMP
127: . br
128: '\" when in a diversion, use .d (rather than nl) for position
129: '\" careful--space might occur at the same
130: '\" position BUT in a different named diversion
131: '\" (hence, the use of the string }D)
132: '\" bug still might be possible, if the same named diversion
133: '\" is used, that a space might occur in the same vertical place.
134: '\" very unlikely for
135: '\" a) monk will remove :D and :E when not in a diversion
136: '\" b) tbl generates unique names
137: . ie !'\n(.z'' \{\
138: . if !'\n(.z'\*(}D' .rr :D :E
139: . nr ;4 1v
140: . if !(\n(.d=\n(:D) .nr :E 0 \" different place for sure
141: . nr ;4 -\n(:Eu \" remove previous accumulation, if any
142: . if \n(;4 \{\
143: . sp \n(;4u
144: . nr :E +\n(;4u \}
145: . rm ;4
146: . ds }D \n(.z
147: . nr :D \n(.d \}
148: . el \{\
149: . rr :D :E \" remove the in-diversion registers
150: . nr ;4 1v
151: . if !(\n(nl=\n(:N) .nr :B 0 \" different place for sure
152: . nr ;4 -\n(:Bu \" remove previous accumulation, if any
153: . if \n(;4 \{\
154: . sp \n(;4u \" space and recompute accumulation
155: . nr :B +\n(;4u \}
156: . rm ;4
157: . nr :N \n(nl \}
158: . ti \n(.iu \" movement resets indentation
159: ])
160:
161: |attribute(horizontal.motion; nostack;
162: $ [\h'$']
163: number $$. [\h'\n$$.']
164: number $number.register [\h'\n($number.register'])
165:
166: |attribute(vertical.motion; nostack;
167: $ [\v'$']
168: number $$. [\v'\n$$.']
169: number $number.register [\v'\n($number.register'])
170:
171: |attribute(concatenate; nostack;
172: [\&\c
173: ])
174:
175: |attribute(new.line; nostack;
176: [
177: . br
178: ])
179:
180: |attribute(indent; stack, default 0;
181: $ [
182: . in $
183: ])
184:
185: |attribute(indent.line; nostack;
186: $ [
187: . ti $
188: ]
189: number $$. [
190: . ti \n$$.u
191: ]
192: number $number.register [
193: . ti \n($number.registeru
194: ])
195:
196: |attribute(fill; stack, init on;
197: on [
198: ' fi
199: ] off [
200: ' nf
201: ])
202:
203: |attribute(adjust; stack, init both;
204: right [
205: . ad r
206: ] left [
207: . ad l
208: ] both [
209: . ad b
210: ] on [
211: . ad
212: ] off [
213: . na
214: ])
215:
216: |attribute(title; nostack;
217: $left $center $right [
218: . tl \(ts$left\(ts$center\(ts$right\(ts
219: ] $$. [
220: . tl \*$$.
221: ] $$.. [
222: . tl \*($$..
223: ] $ [
224: . tl $
225: ])
226:
227: |attribute(center; stack, default off;
228: on [
229: . ce 9999
230: ] off [
231: . ce 0
232: ])
233:
234: |attribute(center.block; stack, default off;
235: on [
236: '\" :1 store for centered block text
237: '\" :Y width of a center block diversion
238: . nr :Y 0 \" initialize width of block
239: . br \" output partial line before block
240: . di :1 \" begin diversion
241: ] off [
242: '\" :1 store for centered block text
243: '\" :Y width of a center block diversion
244: '\" ;L remembered line spacing TEMP
245: '\" ;i remembered indent TEMP
246: '\" ;q remembered fill/no-fill mode TEMP
247: . br \" get last partial line
248: . di \" end diversion of centered block
249: . nr ;q \n(.u \" save prevailing fill/no-fill mode
250: . nf \" bring it back in no-fill
251: . nr ;L \n(.L \" save line spacing
252: . ls 1 \" output display in ls 1
253: . nr ;i \n(.i \" save prevailing indent
254: . if \n(dl>\n(:Y .nr :Y \n(dl
255: . if \n(:Y<\n(.l .in (\n(.lu-\n(:Yu)/2u \"indent by half of white-space
256: . :1 \" text
257: . if \n(;q .fi \" restore fill if necessary
258: . ls \n(;L \" restore line spacing
259: . in \n(;iu \" restore prevailing indent
260: . rr ;L ;i ;q \" free storage
261: . rm :1
262: ])
263:
264: |attribute(text; nostack;
265: $ [$]
266: roman $ [\f1\&$\fP\&]
267: italics $ [\f2\&$\fP\&]
268: bold $ [\f3\&$\fP\&]
269: bolditalics $ [\f4\&$\fP\&]
270: cw $ [\f(CW\&$\fP\&])
271:
272: |attribute(error; nostack;
273: number $* $$. [
274: . tm "__FILE__":__LINE__: $* \n$$.
275: ] number $* $number.register [
276: . tm "__FILE__":__LINE__: $* \n($number.register
277: ] string $* $$. [
278: . tm "__FILE__":__LINE__: $* \n$$.
279: ] string $* $string.register [
280: . tm "__FILE__":__LINE__: $* \n($string.register
281: ] $* [
282: . tm "__FILE__":__LINE__: $*
283: ])
284:
285: |attribute(here; stack, default off;
286: on [
287: '\" group mechanism
288: '\" :0 store for initally diverted text
289: '\" :y flag indicating group/float in progress
290: . if \n(:y .tm "__FILE__":__LINE__: Here's and/or Around's can not be nested
291: . nr :y 1 \" set flag indicating group
292: . br \" output partial line before display
293: . di :0 \" collect in :0
294: ] off [
295: '\" Control page orientation of blocks.
296: '\" Blocks are output as soon after their definition as
297: '\" feasible. The following rules are used:
298: '\" 1. if the block will fit on the current page, output it there.
299: '\" 2. if the block won't fit on any page, and we have used less than
300: '\" half of the current page, then output the block on the
301: '\" current page.
302: '\" 3. skip to the next page.
303: . br \" get last partial line
304: . di \" end diversion
305: '\" The following if condition tests: (1) if the block is too large to
306: '\" fit on the current page and either (2) it will fit on an unused page
307: '\" or (3) we have already used more than half of the current page. (the
308: '\" three conditions are grouped in the form 1 & (2 : 3)). If this
309: '\" total condition is true, then a page is ejected and the block output
310: '\" on the next page.
311: '\" :0 store for initally diverted text
312: '\" :d prevent )h from outputting a floating group
313: '\" :m initial footer place and partial footnote diverter trap
314: '\" :o footer trap location
315: '\" :r position at end of page header macro
316: '\" :y flag indicating group/float in progress
317: '\" ;L remembered line spacing TEMP
318: '\" ;i remembered indent TEMP
319: '\" ;q remembered fill/no-fill mode TEMP
320: . nr :d 1 \" prevent )h from outputting a floating group
321: . if (\n(dn>=\n(.t)&((\n(dn<(\n(.p-\n(:r-\n(:m)):\
322: (\n(nl>(\n(.p-\n(:r-\n(:o/2u+\n(:r)))\
323: . ne \n(.tu+1v \" spring the trap
324: . nr ;q \n(.u \" save prevailing fill/no-fill mode
325: . nf \" bring it back in no-fill
326: . nr ;L \n(.L \" save line spacing
327: . ls 1 \" output display in ls 1
328: . nr ;i \n(.i \" save prevailing indent
329: . in 0 \" indent back
330: . rs \" restore spacing
331: . :0 \" text
332: . nr :d 0 \" allow )h to output a floating group
333: . if \n(;q .fi \" restore fill if necessary
334: . ls \n(;L \" restore line spacing
335: . in \n(;iu \" restore prevailing indent
336: . nr :y 0 \" reset flag indicating group
337: . rr ;L ;i ;q \" free storage
338: . rm :0
339: ])
340:
341: |attribute(around; stack, default off;
342: on [
343: '\" float mechanism
344: '\" :0 store for initally diverted text
345: '\" :y flag indicating group/float in progress
346: '\" Wn page width for column n
347: '\" ;L prevailing line spacing
348: '\" ;f prevailing font
349: '\" ;i prevailing indent
350: '\" ;j prevailing adjust
351: '\" ;l prevailing line length
352: '\" ;s prevailing point size
353: '\" ;u prevailing fill/no-fill mode
354: '\" ;v prevailing vertical spacing
355: . if \n(:y .tm "__FILE__":__LINE__: Here's and/or Around's can not be nested
356: . nr :y 1 \" set flag indicating group
357: . nr ;s \n(.s \" save prevailing point size
358: . nr ;f \n(.f \" save prevailing font
359: . nr ;u \n(.u \" save prevailing fill/no-fill mode
360: . nr ;j \n(.j \" save prevailing adjust
361: . nr ;v \n(.v \" save prevailing vertical spacing
362: . nr ;L \n(.L \" save prevailing line spacing
363: . nr ;l \n(.l \" save prevailing line length
364: . nr ;i \n(.i \" save prevailing indent
365: . ev 1 \" use footnote environment
366: . ps \n(;s \" restore point size
367: . vs \n(;sp+2p \" restore vertical spacing
368: . ft \n(;f \" restore font
369: . nf \" bring it back in no-fill
370: . if \n(;u .fi \" restore fill if necessary
371: . ad \n(;j \" restore page adjust
372: . vs \n(;vu \" restore vertical spacing
373: . ls \n(;L \" restore line spacing
374: . ll \n(;lu \" restore line length
375: . in \n(;iu \" restore indent
376: . ti \n(;iu \" restore indentation
377: . hy 14 \" turn on hyphenation
378: . lt \n(;lu \" restore title length
379: |ifvalue around_width full [
380: . if \n(column_counter \{\
381: . ll \n(W0u \" go wide
382: . lt \n(W0u \}
383: ]
384: . di :0 \" collect in :0
385: ] off [
386: '\" Control page orientation of floats.
387: '\" Floats are output as soon after their definition as
388: '\" feasible. The following rules are used:
389: '\" 1. if the queue contains only this float and it will fit on the
390: '\" current page, output it there.
391: '\" 2. if the queue contains only this float and it won't fit on any
392: '\" page, and we have used less than half of the current page,
393: '\" then output the float on the current page.
394: '\" 3. let the top of page macro handle it.
395: '\" !{a-z} width of stored floating 0=narrow, 1=wide
396: '\" :0 store for initally diverted text
397: '\" :m initial footer place and partial footnote diverter trap
398: '\" :o footer trap location
399: '\" :r position at end of page header macro
400: '\" :w output counter for floating keeps
401: '\" :y flag indicating group/float in progress
402: '\" :z input counter for floating keeps
403: '\" ?{a-z} text of stored floating
404: '\" W current page width
405: '\" |{a-z} size of stored floating
406: '\" ;L prevailing line spacing
407: '\" ;f prevailing font
408: '\" ;i prevailing indent
409: '\" ;j prevailing adjust
410: '\" ;l prevailing line length
411: '\" ;s prevailing point size
412: '\" ;u prevailing fill/no-fill mode
413: '\" ;v prevailing vertical spacing
414: '\" ;w convert to alpha format
415: . br \" get last partial line
416: . di \" end diversion of around block
417: |ifvalue around_width full [
418: . if \n(column_counter \{\
419: . ll \nWu \" go narrow
420: . lt \nWu \}
421: ]
422: . ev \" back to previous environment
423: . nr :z \n(:z%26+1 \" get index of next output element
424: . if \n(:z-\n(:w=0 .tm "__FILE__":__LINE__: too many floating displays
425: . af ;w a \" conversion register for display queue names
426: . nr ;w \n(:z \" form the next queue element name
427: . rn :0 ?\n(;w \" put the display into the queue
428: . nr !\n(;w 0 \" narrow
429: |ifvalue around_width full [
430: . nr !\n(;w 1 \" wide around
431: ]
432: |ifnotvalue around_width full [
433: . if !\n(column_counter .nr !\n(;w 1 \" wide around if only one column
434: ]
435: . nr |\n(;w \n(dn \" put the size of text
436: '\" The following if condition tests: (1) if there is only one float
437: '\" on the queue to output and (2) if wide displays and (3) we are on the
438: '\" first column and (4) if the float fits on the current page or
439: '\" (5) the float is too large to fit on any one page, and (6) we have used
440: '\" less than half of the current page. (the six conditions are grouped
441: '\" in the form (1 & (2 & 3) & (4 : (5 & 6))). If this total condition is true,
442: '\" then a float is output.
443: . if (((\n(:z-\n(:w=1):(\n(:z+26-\n(:w=1))&((\n(!\n(;w=1)&(\n(column_counter<2))&\
444: ((\n(dn<\n(.t):((\n(dn>(\n(.p-\n(:r-\n(:m))&\
445: (\n(nl<=(\n(.p-\n(:r-\n(:o/2u+\n(:r))))) .)z
446: . nr :y 0 \" reset flag indicating group
447: . rr ;L ;f ;i ;j ;l ;s ;u ;v ;w \" free storage
448: ])
449:
450: |attribute(around_placement; nostack;
451: [
452: . )w
453: ])
454:
455: |attribute(footnote; stack, default off;
456: on [
457: '\" :F Footnote text
458: '\" :q amount of footnote text
459: '\" :x flag indicating footnote in progress
460: '\" Wn page width for column n
461: '\" ;L prevailing line spacing
462: '\" ;f prevailing font
463: '\" ;j prevailing adjust
464: '\" ;l prevailing line length
465: '\" ;o prevailing page offset ??????? bug with .po
466: '\" ;s prevailing point size
467: '\" ;u prevailing fill/no-fill mode
468: '\" ;v prevailing vertical spacing
469: . if \n(:x .tm "__FILE__":__LINE__: Footnotes can not be nested
470: . nr :x 1 \" set flag indicating footnote
471: . nr ;s \n(.s \" save prevailing point size
472: . nr ;f \n(.f \" save prevailing font
473: . nr ;u \n(.u \" save prevailing fill/no-fill mode
474: . nr ;j \n(.j \" save prevailing adjust
475: . nr ;v \n(.v \" save prevailing vertical spacing
476: . nr ;L \n(.L \" save prevailing line spacing
477: . nr ;l \n(.l \" save prevailing line length
478: . ev 1 \" use footnote environment
479: . ps \n(;s \" restore point size
480: . vs \n(;sp+2p \" restore vertical spacing
481: . ft \n(;f \" restore font
482: . nf \" bring it back in no-fill
483: . if \n(;u .fi \" restore fill if necessary
484: . ad \n(;j \" restore page adjust
485: . vs \n(;vu \" restore vertical spacing
486: . ls \n(;L \" restore line spacing
487: . ll \n(;lu \" restore line length
488: . in 0 \" reset indent
489: . ti 0 \" reset indentation
490: . hy 14 \" turn on hyphenation
491: . lt \n(;lu \" restore title length
492: |ifvalue footnote_width full [
493: . if \n(column_counter \{\
494: . ll \n(W0u \" go wide
495: . lt \n(W0u \}
496: ]
497: . da :F \" collect in :F
498: . ie !\n(:q \{\
499: . nr ;o \n(.o \" save prevailing page offset
500: . po 0 \" always from left margin
501: . ps 10 \" 10 point roman font
502: . vs 12p
503: . ft 1
504: . ie \n(.A=0 \l'72p' \" layout partial rule if new footnote
505: . el __________
506: . ft \" restore values
507: . vs
508: . ps
509: . po \n(;ou \}
510: . el .sp 1 \" leave a blank between them
511: ] off [
512: '\" :V vertical spacing
513: '\" :m initial footer place and partial footnote diverter trap
514: '\" :o footer trap location
515: '\" :q amount of footnote text
516: '\" :v width of stored footnote 0=narrow, 1=wide
517: '\" :x flag indicating footnote in progress
518: '\" W current page width
519: '\" ;L prevailing line spacing
520: '\" ;f prevailing font
521: '\" ;j prevailing adjust
522: '\" ;l prevailing line length
523: '\" ;o prevailing page offset ??????? bug with .po
524: '\" ;s prevailing point size
525: '\" ;u prevailing fill/no-fill mode
526: '\" ;v prevailing vertical spacing
527: . br \" get last partial line
528: . da \" end diversion
529: |ifvalue footnote_width full [
530: . if \n(column_counter \{\
531: . ll \nWu \" go narrow
532: . lt \nWu \}
533: . nr :v 1 \" wide footnote
534: ]
535: |ifnotvalue footnote_width full [
536: . if !\n(column_counter .nr :v 1 \" wide footnote if only one column
537: ]
538: . ev \" go back to previous environment
539: . nr :x 0 \" clear flag indicating footnote
540: . if !\n(:o-\n(:m \{\
541: . nr :o +\n(:Vu-1u \" traps spring once we go past
542: . nr dn +\n(:V-\n(.v \} \" uncertainty correction
543: . nr :q +\n(dnu \" add in amount of new footnotes
544: '\" Move up footer trap, but not above current position on page
545: . nr :o +\n(dnu
546: . if !\n(.pu-\n(nlu-.5p-\n(:ou .nr :o \n(.pu-\n(nlu-.5p
547: '\" or below :m!
548: . if !\n(:ou-\n(:mu .nr :o \n(:mu
549: '\" or at all if in multi-column mode and the footnote is wide
550: . if \n(column_counter>1&\n(:v .nr :o \n(:mu
551: . ch )f -\n(:ou \" move footer trap
552: . rr ;L ;f ;j ;l ;o ;s ;u ;v \" free storage
553: ])
554:
555: |attribute(size; stack, default 10;
556: $ [|ifvalue inline on [\s$\&]|ifvalue inline off [
557: . ps $
558: ]])
559:
560: |attribute(space; stack, init 12;
561: $ [
562: . vs $
563: ])
564:
565: |attribute(SPACE; nostack;
566: [
567: . vs \n(.sp+2p \" restore vertical spacing
568: ])
569:
570: |attribute(font; stack, default roman;
571: roman [|ifvalue inline on [\&\f1\&]|ifvalue inline off [
572: . ft 1
573: ]] italics [|ifvalue inline on [\&\f2\&]|ifvalue inline off [
574: . ft 2
575: ]] bold [|ifvalue inline on [\&\f3\&]|ifvalue inline off [
576: . ft 3
577: ]] bolditalics [|ifvalue inline on [\&\f4\&]|ifvalue inline off [
578: . ft 4
579: ]] cw [|ifvalue inline on [\&\f(CW\&]|ifvalue inline off [
580: . ft CW
581: ]])
582:
583: |attribute(font.family; stack, default times;
584: times [
585: . fp 1 R
586: . fp 2 I
587: . fp 3 B
588: . fp 4 BI
589: ] palatino [
590: . fp 1 PA
591: . fp 2 PI
592: . fp 3 PB
593: . fp 4 PX
594: ] bembo [
595: . fp 1 B1
596: . fp 2 B2
597: . fp 3 B3
598: . fp 4 B4
599: ] optima [
600: . fp 1 O1
601: . fp 2 O2
602: . fp 3 O3
603: . fp 4 O4
604: ] souvenir [
605: . fp 1 SV
606: . fp 2 SI
607: . fp 3 SB
608: . fp 4 SX
609: ] helvetica [
610: . fp 1 H
611: . fp 2 HI
612: . fp 3 HB
613: . fp 4 HX
614: ] cw [
615: . fp 1 CW
616: . fp 2 I
617: . fp 3 B
618: . fp 4 BI
619: ] gothic [
620: . fp 1 C
621: . fp 2 CX
622: . fp 3 TB
623: . fp 4 TX
624: ] condensed [
625: . fp 1 Hcond
626: . fp 2 HcondI
627: . fp 3 HcondB
628: . fp 4 HlightI
629: ] narrow [
630: . fp 1 Hr
631: . fp 2 Hi
632: . fp 3 Hb
633: . fp 4 Hx
634: ])
635:
636: |attribute(if; nostack;
637: $test [
638: . if $test \
639: ] begin $test [
640: . if $test \{\
641: ] end [\}\c
642: ] else $test [
643: . ie $test \
644: ] else begin $test [
645: . ie $test \{\
646: ] else [
647: . el \
648: ] else begin [
649: . el \{\
650: ])
651:
652: |attribute(tab; nostack;
653: [\& ])
654:
655: |attribute(leader; nostack;
656: [\&&])
657:
658: |attribute(thick.line; nostack;
659: $ [
660: . ps 24
661: \l'$'
662: . ps
663: ] [
664: . ps 24
665: \l'\n(.lu'
666: . ps
667: ])
668:
669: |attribute(line; nostack;
670: $ [\l'$']
671: [\l'\n(.lu'])
672:
673: |attribute(box; nostack;
674: x [\s12\o'\(mu\(sq'\s0]
675: empty [\s12\(sq\s0]
676: [\(sq])
677:
678: |attribute(underline; stack, default off;
679: on [\kx]
680: off [\l'|\nxu\(ul'])
681:
682: |attribute(hyphenate; stack, init on;
683: on [
684: . hy 14
685: ] off [
686: . nh
687: ])
688:
689: |attribute(case; stack, init any;
690: upper [
691: '\" need to write this yet
692: ] lower [
693: '\" need to write this yet
694: ] capitalize [
695: '\" need to write this yet
696: ] any [
697: '\" need to write this yet
698: ])
699:
700: |attribute(tab.stops; nostack;
701: $* [
702: . ta $*
703: ] [
704: . ta .5i 1.0i 1.5i 2.0i 2.5i 3.0i 3.5i 4.0i 4.5i 5.0i 5.5i 6.0i 6.5i 7.0i 7.5i
705: ])
706:
707: |attribute(set; nostack;
708: $* $number [
709: |for i in $* {
710: . nr $i $number
711: }] string $* $string [
712: |for i in $* {
713: . ds $i $string
714: }])
715:
716: |attribute(store; nostack;
717: $* $$. [
718: |for i in $* {
719: . nr $i \n$$.
720: }] $* $number.register [
721: |for i in $* {
722: . nr $i \n($number.register
723: }] string $* $$. [
724: |for i in $* {
725: . ds $i \*$$.
726: }] string $* $string.register [
727: |for i in $* {
728: . ds $i \*($string.register
729: }] number.from.string $* $$. [
730: |for i in $* {
731: . nr $i \*$$.
732: }] number.from.string $* $string.register [
733: |for i in $* {
734: . nr $i \*($string.register
735: }] string.from.number $* $$. [
736: |for i in $* {
737: . ds $i \n$$.
738: }] string.from.number $* $number.register [
739: |for i in $* {
740: . ds $i \n($number.register
741: }] width $* $$. [
742: |for i in $* {
743: . nr $i \w'\*$$.'
744: }] width $* $number.register [
745: |for i in $* {
746: . nr $i \w'\*($number.register'
747: }] indent $* [
748: |for i in $* {
749: . nr $i \n(.i
750: }] linelength $* [
751: |for i in $* {
752: . nr $i \n(.l
753: }] pagewidth $* [
754: |for i in $* {
755: . nr $i \nWu
756: }] totrap $* [
757: |for i in $* {
758: . nr $i \n(.t
759: }] pageoffset $* [
760: |for i in $* {
761: . nr $i \n(.o
762: }] diversionheight $* [
763: |for i in $* {
764: . nr $i \n(dn
765: }])
766:
767: |attribute(clear; nostack;
768: $* [
769: |for i in $* {
770: . nr $i 0
771: }] string $* [
772: . rm $*
773: ])
774:
775: |attribute(rename; nostack;
776: $from $to [
777: . rn $from $to
778: ])
779:
780: |attribute(add; nostack;
781: $result $$. $* [
782: . nr $result \n$$.
783: |for i in $* {
784: . nr $result +\n($i
785: }] $result $operand $* [
786: . nr $result \n($operand
787: |for i in $* {
788: . nr $result +\n($i
789: }] $result $$. [
790: . nr $result +\n$$.
791: ] $result $operand [
792: . nr $result +\n($operand
793: ] constant $result $constant $* [
794: . nr $result $constant
795: |for i in $* {
796: . nr $result +$i
797: }] constant $result $constant [
798: . nr $result +$constant
799: ] string $string $text [
800: . as $string $text
801: ] string.from.number $string $$. [
802: . as $string \n$$.
803: ] string.from.number $string $number.register [
804: . as $string \n($number.register
805: ] string.from.string $string $$. [
806: . as $string \*$$.
807: ] string.from.string $string $string.register [
808: . as $string \*($string.register
809: ])
810:
811: |attribute(sub; nostack;
812: $result $$. $* [
813: . nr $result \n$$.
814: |for i in $* {
815: . nr $result -\n($i
816: }] $result $operand $* [
817: . nr $result \n($operand
818: |for i in $* {
819: . nr $result -\n($i
820: }] $result $$. [
821: . nr $result -\n$$.
822: ] $result $operand [
823: . nr $result -\n($operand
824: ] constant $result $constant $* [
825: . nr $result $constant
826: |for i in $* {
827: . nr $result -$i
828: }] constant $result $constant [
829: . nr $result -$constant
830: ])
831:
832: |attribute(incr; nostack;
833: $* [
834: |for i in $* {
835: . nr $i +1
836: }])
837:
838: |attribute(decr; nostack;
839: $* [
840: |for i in $* {
841: . nr $i -1
842: }])
843:
844: |attribute(protect; nostack;
845: $ [
846: . ne $
847: ] [
848: . ne 3
849: ])
850:
851: |attribute(warn.orphan; nostack;
852: $ [
853: '\" need to write this yet
854: ] [
855: '\" need to write this yet
856: ])
857:
858: |attribute(column; nostack;
859: $column $width $offset [
860: '\" :c number of columns
861: '\" On page offset for column n
862: '\" Wn page width for column n
863: . if \n(:c<$column .nr :c $column
864: . nr W$column $width
865: . nr O$column $offset
866: ] width $width [
867: '\" :c number of columns
868: '\" Wn page width for column n
869: . nr W\n(:c $width
870: ] offset $offset [
871: '\" :c number of columns
872: '\" On page offset for column n
873: . nr O\n(:c $offset
874: ] next [
875: '\" :c number of columns
876: . nr :c +1
877: ] clear [
878: '\" :c number of columns
879: . rr :c
880: ] new [
881: . ie !\n(column_counter .tm "__FILE__":__LINE__: not in multi-column mode
882: . el \{\
883: . br \" force out last partial line
884: . ne \n(.tu+1v \} \" spring footer trap for this column
885: ] new $ [
886: '\" O current page offset
887: '\" On page offset for column n
888: '\" W current page width
889: '\" Wn page width for column n
890: '\" ;d delta width TEMP
891: . ie !\n(column_counter .tm "__FILE__":__LINE__: not in multi-column mode
892: . el \{\
893: . br \" force out last partial line
894: . ne \n(.tu+1v \" spring footer trap for this column
895: . nr ;d \n(.lu-\n(W\n('column_counter'u \" quotations shrink line length
896: . nr column_counter $ \" set column to $
897: . nr O \n(O$u \" restore new offset
898: . po \nOu \" set new offset
899: . nr W \n(W$u+\n(;du \" restore new width
900: . ll \nWu \" set new line length
901: . lt \nWu \" set new title length
902: . rr ;d \} \" free storage
903: ] old $ [
904: '\" O current page offset
905: '\" On page offset for column n
906: '\" Un position to return to for column n
907: '\" W current page width
908: '\" Wn page width for column n
909: '\" ;d delta width TEMP
910: . ie !\n(column_counter .tm "__FILE__":__LINE__: not in multi-column mode
911: . el \{\
912: . br \" force out last partial line
913: . if \n(nl>\n(U\n(column_counter \
914: . mk U\n(column_counter \" new vertical position
915: . nr ;d \n(.lu-\n(W\n('column_counter'u \" quotations shrink line length
916: . nr column_counter $ \" set column to $
917: . nr O \n(O$u \" restore new offset
918: . po \nOu \" set new offset
919: . nr W \n(W$u+\n(;du \" restore new width
920: . ll \nWu \" set new line length
921: . lt \nWu \" set new title length
922: . rs \" restore spacing
923: . ie \n(U$ .sp |\n(U$u \" restore vertical position
924: . el .sp |\n(U0u \" default top if not set
925: . ns \" turn off spacing
926: . rr ;d \} \" free storage
927: ] on [
928: '\" O current page offset
929: '\" On page offset for column n
930: '\" Un position to return to for column n
931: '\" W current page width
932: '\" Wn page width for column n
933: . ie \n(column_counter .tm "__FILE__":__LINE__: already in multi-column mode
934: . el \{\
935: . br \" force out last partial line
936: . nr column_counter 1 \" flag for multi-column mode, first column
937: . nr W \n(W1u \" restore first column width
938: . ll \nWu \" set first column line length
939: . lt \nWu \" set first column title length
940: . nr O \n(O1u \" restore first column offset
941: . po \nOu \" set first column offset
942: . mk U0 \" set where all columns start
943: . ns \" avoid .sp in user text here
944: . rr U1 U2 U3 U4 U5 U6 U7 U8 U9 \" zero column starts
945: . rr ;d \} \" free storage
946: ] off [
947: '\" :c number of columns
948: '\" Un position to return to for column n
949: '\" W current page width
950: '\" Wn page width for column n
951: '\" ;d delta width TEMP
952: . ie !\n(column_counter .tm "__FILE__":__LINE__: already in full page mode
953: . el \{\
954: . br \" force out last partial line
955: . if \n(nl>\n(U\n(column_counter \
956: . mk U\n(column_counter \" new vertical position
957: . nr ;d \n(.lu-\n(W\n('column_counter'u \" quotations shrink line length
958: . nr column_counter 0 \" set flag for full page mode
959: . nr O \n(O0u \" restore new offset
960: . po \nOu \" set new offset
961: . nr W \n(W0u+\n(;du \" restore line length
962: . ll \nWu \" set new line length
963: . lt \nWu \" set new title length
964: . rs \" restore spacing
965: . sp |\n(U0u \" restore vertical position
966: . if \n(nl<\n(U1 \
967: . sp |\n(U1u
968: . if \n(nl<\n(U2 \
969: . sp |\n(U2u
970: . if \n(nl<\n(U3 \
971: . sp |\n(U3u
972: . if \n(nl<\n(U4 \
973: . sp |\n(U4u
974: . if \n(nl<\n(U5 \
975: . sp |\n(U5u
976: . if \n(nl<\n(U6 \
977: . sp |\n(U6u
978: . if \n(nl<\n(U7 \
979: . sp |\n(U7u
980: . if \n(nl<\n(U8 \
981: . sp |\n(U8u
982: . if \n(nl<\n(U9 \
983: . sp |\n(U9u
984: . ti \n(.iu \" movement resets indentation
985: . rr U1 U2 U3 U4 U5 U6 U7 U8 U9 \" zero column starts
986: . ns \" turn off spacing
987: . rr ;d \} \" free storage
988: ] 2 [
989: '\" :c number of columns
990: '\" O current page offset
991: '\" On page offset for column n
992: '\" Un position to return to for column n
993: '\" W current page width
994: '\" Wn page width for column n
995: . ie \n(column_counter .tm "__FILE__":__LINE__: already in multi-column mode
996: . el \{\
997: . br \" force out last partial line
998: . nr column_counter 1 \" flag for multi-column mode, first column
999: . nr W0 \nW \" save width
1000: . nr W \n(.lu*8u/17u \" new width
1001: . nr W1 \nW \" new width
1002: . nr W2 \nW \" new width
1003: . nr O0 \n(.ou \" page offset for other column
1004: . nr O1 \n(.ou \" page offset for other column
1005: . nr O2 \n(.lu*9u/17u+\n(.ou \" page offset for other column
1006: . ll \nWu \" set new line length
1007: . lt \nWu \" set new title length
1008: . nr :c 2 \" two columns
1009: . mk U0 \" set where all columns start
1010: . ns \" turn off spacing
1011: . rr U1 U2 \} \" zero column starts
1012: ])
1013:
1014: |attribute(divert.string; stack, default off;
1015: $string.name [
1016: . ds $string.name ]
1017: off [
1018: ])
1019:
1020: |attribute(divert.number; stack, default off;
1021: $number.name [
1022: . nr $number.name ]
1023: off [
1024: ])
1025:
1026: |attribute(divert.output; stack, default off;
1027: on $string.name [
1028: '\" ;L prevailing line spacing
1029: '\" ;f prevailing font
1030: '\" ;j prevailing adjust
1031: '\" ;l prevailing line length
1032: '\" ;o prevailing page offset ??????? bug with .po
1033: '\" ;s prevailing point size
1034: '\" ;u prevailing fill/no-fill mode
1035: '\" ;v prevailing vertical spacing
1036: . nr ;s \n(.s \" save prevailing point size
1037: . nr ;f \n(.f \" save prevailing font
1038: . nr ;u \n(.u \" save prevailing fill/no-fill mode
1039: . nr ;j \n(.j \" save prevailing adjust
1040: . nr ;v \n(.v \" save prevailing vertical spacing
1041: . nr ;L \n(.L \" save prevailing line spacing
1042: . nr ;l \n(.l \" save prevailing line length
1043: . ev 1 \" use footnote environment
1044: . ps \n(;s \" restore point size
1045: . vs \n(;sp+2p \" restore vertical spacing
1046: . ft \n(;f \" restore font
1047: . nf \" bring it back in no-fill
1048: . if \n(;u .fi \" restore fill if necessary
1049: . ad \n(;j \" restore page adjust
1050: . vs \n(;vu \" restore vertical spacing
1051: . ls \n(;L \" restore line spacing
1052: . ll \n(;lu \" restore line length
1053: . in 0 \" reset indent
1054: . ti 0 \" reset indentation
1055: . hy 14 \" turn on hyphenation
1056: . lt \n(;lu \" restore title length
1057: . di $string.name \" collect in $string.name
1058: ] off [
1059: '\" ;L prevailing line spacing
1060: '\" ;f prevailing font
1061: '\" ;j prevailing adjust
1062: '\" ;l prevailing line length
1063: '\" ;o prevailing page offset ??????? bug with .po
1064: '\" ;s prevailing point size
1065: '\" ;u prevailing fill/no-fill mode
1066: '\" ;v prevailing vertical spacing
1067: . br \" get last partial line
1068: . di \" end diversion
1069: . ev \" go back to previous environment
1070: . rr ;L ;f ;j ;l ;o ;s ;u ;v \" free storage
1071: ])
1072:
1073: |attribute(divert.input; stack, default off;
1074: on $string.name [
1075: . eo
1076: . de $string.name\(ts\(ts
1077: ] off [
1078: .\(ts\(ts
1079: . ec
1080: ])
1081:
1082: |attribute(append.output; stack, default off;
1083: on $string.name [
1084: '\" ;L prevailing line spacing
1085: '\" ;f prevailing font
1086: '\" ;j prevailing adjust
1087: '\" ;l prevailing line length
1088: '\" ;o prevailing page offset ??????? bug with .po
1089: '\" ;s prevailing point size
1090: '\" ;u prevailing fill/no-fill mode
1091: '\" ;v prevailing vertical spacing
1092: . nr ;s \n(.s \" save prevailing point size
1093: . nr ;f \n(.f \" save prevailing font
1094: . nr ;u \n(.u \" save prevailing fill/no-fill mode
1095: . nr ;j \n(.j \" save prevailing adjust
1096: . nr ;v \n(.v \" save prevailing vertical spacing
1097: . nr ;L \n(.L \" save prevailing line spacing
1098: . nr ;l \n(.l \" save prevailing line length
1099: . ev 1 \" use footnote environment
1100: . ps \n(;s \" restore point size
1101: . vs \n(;sp+2p \" restore vertical spacing
1102: . ft \n(;f \" restore font
1103: . nf \" bring it back in no-fill
1104: . if \n(;u .fi \" restore fill if necessary
1105: . ad \n(;j \" restore page adjust
1106: . vs \n(;vu \" restore vertical spacing
1107: . ls \n(;L \" restore line spacing
1108: . ll \n(;lu \" restore line length
1109: . in 0 \" reset indent
1110: . ti 0 \" reset indentation
1111: . hy 14 \" turn on hyphenation
1112: . lt \n(;lu \" restore title length
1113: . da $string.name \" collect in $string.name
1114: ] off [
1115: '\" ;L prevailing line spacing
1116: '\" ;f prevailing font
1117: '\" ;j prevailing adjust
1118: '\" ;l prevailing line length
1119: '\" ;o prevailing page offset ??????? bug with .po
1120: '\" ;s prevailing point size
1121: '\" ;u prevailing fill/no-fill mode
1122: '\" ;v prevailing vertical spacing
1123: . br \" get last partial line
1124: . da \" end diversion
1125: . ev \" go back to previous environment
1126: . rr ;L ;f ;j ;l ;o ;s ;u ;v \" free storage
1127: ])
1128:
1129: |attribute(append.input; stack, default off;
1130: on $string.name [
1131: . eo
1132: . am $string.name\(ts\(ts
1133: ] off [
1134: .\(ts\(ts
1135: . ec
1136: ])
1137:
1138: |attribute(invoke; nostack;
1139: on $offset $what [
1140: . wh 15i $what \" activate the trap
1141: . ch $what \n(nlu+$offset \" move it in place
1142: ] on number $$. $what [
1143: . wh 15i $what \" activate the trap
1144: . ch $what \n(nlu+\n$$.u \" move it in place
1145: ] on number $number.register $what [
1146: . wh 15i $what \" activate the trap
1147: . ch $what \(nlu+\n($number.registeru \" move it in place
1148: ] at constant $constant $what [
1149: . wh 15i $what \" activate the trap
1150: . ch $what $constant \" move it in place
1151: ] at number $$. $what [
1152: . wh 15i $what \" activate the trap
1153: . ch $what \n$$.u \" move it in place
1154: ] at number $number.register $what [
1155: . wh 15i $what \" activate the trap
1156: . ch $what \n($number.registeru \" move it in place
1157: ] end [
1158: . br \" get last partial line
1159: . di \" turn off diversions
1160: ] off $what [
1161: . ch $what \" remove the trap
1162: ])
1163:
1164: |attribute(remember; nostack;
1165: $ [
1166: . mk $
1167: ])
1168:
1169: |attribute(return; nostack;
1170: $$. [
1171: . sp |\n$$.u
1172: . ti \n(.iu \" movement resets indentation
1173: ] $ [
1174: . sp |\n($u
1175: . ti \n(.iu \" movement resets indentation
1176: ])
1177:
1178: |attribute(goto; nostack;
1179: $ [
1180: . sp |$
1181: . ti \n(.iu \" movement resets indentation
1182: ])
1183:
1184: |attribute(string; nostack;
1185: $$. [\*$$.]
1186: $string.register [\*($string.register]
1187: roman $$. [\f1\&\*$$.\fP\&]
1188: italics $$. [\f2\&\*$$.\fP\&]
1189: bold $$. [\f3\&\*$$.\fP\&]
1190: bolditalics $$. [\f4\&\*$$.\fP\&]
1191: cw $$. [\f(CW\&\*$$.\fP\&]
1192: roman $string.register [\f1\&\*($string.register\fP\&]
1193: italics $string.register [\f2\&\*($string.register\fP\&]
1194: bold $string.register [\f3\&\*($string.register\fP\&]
1195: bolditalics $string.register [\f4\&\*($string.register\fP\&]
1196: cw $string.register [\f(CW\&\*($string.register\fP\&])
1197:
1198: |attribute(macro; nostack;
1199: $ [
1200: . $
1201: ])
1202:
1203: |attribute(number; nostack;
1204: $$. [\n$$.]
1205: $number.register [\n($number.register]
1206: ++ $$. [\n+$$.]
1207: ++ $number.register [\n+($number.register]
1208: format $* $format [
1209: |for i in $* {
1210: . af $i $format
1211: }]
1212: incr $* $incr [
1213: |for i in $* {
1214: . nr $i +0 $incr
1215: }]
1216: format.from.string $* $$. [
1217: |for i in $* {
1218: . af $i \*$$.
1219: }]
1220: incr $* $incr [
1221: |for i in $* {
1222: . nr $i +0 $incr
1223: }]
1224: format.from.string $* $format [
1225: |for i in $* {
1226: . af $i \*($format
1227: }]
1228: incr $* $incr [
1229: |for i in $* {
1230: . nr $i +0 $incr
1231: }])
1232:
1233: |attribute(list.pre; stack, default;
1234: [
1235: . rm premark_string
1236: ]
1237: $pre [
1238: . ds premark_string $pre
1239: ])
1240:
1241: |attribute(list.format; stack, default;
1242: [
1243: . rm format_string
1244: ]
1245: $format [
1246: . ds format_string $format
1247: ])
1248:
1249: |attribute(list.post; stack, default;
1250: [
1251: . rm postmark_string
1252: ]
1253: $post [
1254: . ds postmark_string $post
1255: ])
1256:
1257: |attribute(list.indent; stack, default;
1258: [
1259: . rm indent_string
1260: ]
1261: $indent [
1262: . ds indent_string $indent
1263: ])
1264:
1265: |attribute(list; nostack;
1266: off [
1267: '\" ;i remembered indent TEMP
1268: . )C ;i indentsave_string \*(indentsave_string
1269: . in \n(;iu
1270: . )C list_counter listsave_string \*(listsave_string
1271: . rm ;i
1272: ] on [
1273: . ds indentsave_string \n(.i \*(indentsave_string
1274: . in +\w'\*(indent_string'u
1275: . af list_counter 0
1276: . ds listsave_string \n(list_counter \*(listsave_string
1277: . nr list_counter 0 1
1278: ])
1279:
1280: |attribute(file.information; nostack;
1281: [
1282: . lf __LINE__ __FILE__
1283: ])
1284:
1285: |attribute(reference.style; nostack;
1286: acm [|reference_style(acm)
1287: ] apa [|reference_style(apa)
1288: ] att [|reference_style(att)
1289: ] ieee [|reference_style(ieee)
1290: ] lsa [|reference_style(lsa)
1291: ] pami [|reference_style(pami)
1292: ] spectrum [|reference_style(spectrum)
1293: ])
1294:
1295: |attribute(reference.option; nostack;
1296: tm [|reference_style(same tm)
1297: ] rp [|reference_style(same rp)
1298: ] nroff [|reference_style(same nroff)
1299: ] troff [|reference_style(same troff)
1300: ] sort [|reference_style(same sort)
1301: ] sequence [|reference_style(same sequence)
1302: ] a [|reference_style(same a)
1303: ] d [|reference_style(same d)
1304: ] t [|reference_style(same t)
1305: ] ad [|reference_style(same ad)
1306: ] at [|reference_style(same at)
1307: ] da [|reference_style(same da)
1308: ] dt [|reference_style(same dt)
1309: ] ta [|reference_style(same ta)
1310: ] td [|reference_style(same td)
1311: ] adt [|reference_style(same adt)
1312: ] atd [|reference_style(same atd)
1313: ] dat [|reference_style(same dat)
1314: ] dta [|reference_style(same dta)
1315: ] tad [|reference_style(same tad)
1316: ] tda [|reference_style(same tda)
1317: ])
1318:
1319: |attribute(reference; stack, default off;
1320: database [|reference_database<]
1321: include [|reference_include<]
1322: list [|reference_list<]
1323: on [|reference<]
1324: off [>])
1325:
1326: |attribute(reference.placement; nostack;
1327: [|reference_placement
1328: ])
1329:
1330: |attribute(table; stack, default off;
1331: on [
1332: . TS
1333: ] off [
1334: . TE
1335: ])
1336:
1337: |attribute(ipa; stack, default off;
1338: on [@ipa(]
1339: off [)])
1340:
1341: |attribute(picture; stack, default off;
1342: on [
1343: . PS
1344: ] off [
1345: . PE
1346: ])
1347:
1348: |attribute(ped; stack, default off;
1349: on [
1350: . GS
1351: ] off[
1352: . GE
1353: ])
1354:
1355: |attribute(ideal; stack, default off;
1356: on [
1357: . IS
1358: ] off[
1359: . IE
1360: ])
1361:
1362: |attribute(equation; stack, default off;
1363: on [
1364: '\" :4 store for equations
1365: . br \" output partial line before equation
1366: . di :4 \" begin diversion
1367: . EQ \" begin equation
1368: ] off [
1369: '\" :4 store for equations
1370: '\" :D amount of accumulate blank lines in diversion
1371: '\" :E position of last minimum space in diversion
1372: '\" :Y width of a center block diversion
1373: '\" 10 the equation as a string
1374: . EN \" end equation
1375: . br \" get last partial line
1376: . di \" end diversion of equation
1377: . rm :4 \" throw the equation away
1378: |ifvalue center.block on [
1379: . if \w@\*(10\*(equation_string@ \{\
1380: . if \n(:Y<\w@\*(10@ .nr :Y \w@\*(10@ \" update width
1381: \!\*(10\h'\\n(.lu-\w@\*(10\*(equation_string@u-\\n(.iu'\*(equation_string \" output next expansion
1382: . rr :D :E \}] \" pretend we've moved
1383: |ifvalue center on [
1384: . if \w@\*(10\*(equation_string@ .tl \(ts\(ts\*(10\(ts\*(equation_string\(ts]
1385: |ifnotvalue center.block on [ |ifnotvalue center on [
1386: . if \w@\*(10\*(equation_string@ \{\
1387: . pc \" protect against use of % in eqn
1388: . tl \(ts\h'\n(.iu'\*(10\(ts\(ts\*(equation_string\(ts
1389: . pc % \}]] \" give % back to tl
1390: . rm 10 \" free storage
1391: ])
1392:
1393: |attribute(inline.equation; stack, default off;
1394: on []
1395: off [])
1396:
1397: |attribute(graph; stack, default off;
1398: on [
1399: . G1
1400: ] off [
1401: . G2
1402: ])
1403:
1404: |attribute(bargraph; stack, default off;
1405: on [
1406: . B1
1407: ] off [
1408: . B0
1409: ])
1410:
1411: |attribute(computeroutput; stack, default off;
1412: on [
1413: . CW
1414: ] off [
1415: . CN
1416: ])
1417:
1418: |attribute(citation; nostack;
1419: save on [
1420: . CD "]
1421: save off string $$. [" "\*$$."
1422: ] save off string $string.register [" "\*($string.register"
1423: ] save off number $$. [" "\n$$."
1424: ] save off number $number.register [" "\n($number.register"
1425: ] save string $name $$. [\&\c
1426: . CD "$name" "\*$$."
1427: ] save string $name $string.register [\&\c
1428: . CD "$name" "\*($string.register"
1429: ] save number $name $$. [\&\c
1430: . CD "$name" "\n$$."
1431: ] save number $name $number.register [\&\c
1432: . CD "$name" "\n($number.register"
1433: ] remember on [\&\c
1434: . CU "]
1435: remember off ["]
1436: remember string $name [\&\c
1437: . CU "$name"])
1438:
1439: |attribute(index; stack, default off;
1440: on [\&\c
1441: . tm ix: ]
1442: off [ \n'page_counter'
1443: \&])
1444:
1445: |attribute(contents; nostack;
1446: $category $level $sequence $text [
1447: . tm .TC $category $level \*($sequence \*($text \n'page_counter'
1448: ])
1449:
1450: |attribute(white.text; nostack;
1451: $text [|ifvalue verbatim off []|ifvalue verbatim on [$text]])
1452:
1453: |attribute(nl.paragraph; nostack;
1454: [|ifvalue verbatim on [
1455: ]|ifvalue verbatim off []])
1456:
1457: |attribute(format.type; stack, init none;
1458: model [
1459: . ds format_type model
1460: ] acm [
1461: . ds format_type acm
1462: ] none [
1463: . ds format_type none
1464: ])
1465:
1466: |attribute(list.type; stack, default none;
1467: fixed []
1468: calculated []
1469: none [])
1470:
1471: |attribute(list.spacing; stack, default off;
1472: off []
1473: on [])
1474:
1475: |attribute(verbatim; stack, default off;
1476: off []
1477: on [])
1478:
1479: |attribute(draft; stack, default off;
1480: off []
1481: on [])
1482:
1483: |attribute(sectioning; stack, default bysection;
1484: bysection []
1485: bychapter []
1486: byappendix [])
1487:
1488: |attribute(globalparagraph.style; stack, default flushed;
1489: indented []
1490: numbered []
1491: flushed [])
1492:
1493: |attribute(localparagraph.style; stack, default flushed;
1494: indented []
1495: numbered []
1496: flushed [])
1497:
1498: |attribute(inline; stack, default on;
1499: off []
1500: on [])
1501:
1502: |attribute(footnote_width; stack, default normal;
1503: narrow []
1504: full []
1505: normal[])
1506:
1507: |attribute(around_width; stack, default normal;
1508: narrow []
1509: full []
1510: normal[])
1511:
1512: |attribute(sawreference; stack, default off;
1513: off []
1514: on [])
1515:
1516: |attribute(sawabstract; stack, default off;
1517: off []
1518: on [])
1519:
1520: |attribute(sawkeywords; stack, default off;
1521: off []
1522: on [])
1523:
1524: |attribute(sawoverflow; stack, default off;
1525: off []
1526: on [])
1527:
1528: |attribute(sawtitlebox; stack, default off;
1529: off []
1530: on [])
1531:
1532: |attribute(sawendnote; stack, default off;
1533: off []
1534: on [])
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.