1 /* Copyright (c) 1986, 1987, 1988, 1989, 1990 Hewlett-Packard Co. */
2 /* Interface definition for HP Tag/TeX translator */
4 /* Things to watch out for:
6 1. Index processing. Notice for a number of tags (<BOOK> for example),
7 there is specific code when the tag is in <IDX>:
8 <START-CODE * IDX, * IDXSYN>, etc.
9 Many tags don't have empty <* IDX> string-code processing, to save
10 on executable size. Therefore, when you add string-code processing
11 to a tag, make sure you add empty string-code for <* IDX>.
12 2. Index processing for <COMPUTER>, <CURSOR>, <USER>. They all have
13 hardcoded default values for their parameters to save on program
14 size (otherwise we have to uncomment parameter code). This is not
15 a problem since parameters is unimplemented. Need to watch out for
16 this when we do implement.
19 /* Redefine m-starttextincell to enable */
20 <!ENTITY m-starttextincell "">
22 <!ENTITY MINUS SDATA "-">
23 <!ENTITY PM SDATA "<CHARACTERSET symbol><0xB1></CHARACTERSET>">
24 <!ENTITY DIV SDATA "<CHARACTERSET symbol><0xB8></CHARACTERSET>">
25 <!ENTITY TIMES SDATA "<CHARACTERSET symbol><0xB4></CHARACTERSET>">
26 <!ENTITY LEQ SDATA "<CHARACTERSET symbol><0xA3></CHARACTERSET>">
27 <!ENTITY GEQ SDATA "<CHARACTERSET symbol><0xB3></CHARACTERSET>">
28 <!ENTITY NEQ SDATA "<CHARACTERSET symbol><0xB9></CHARACTERSET>">
29 <!ENTITY COPY SDATA "<CHARACTERSET symbol><0xE3></CHARACTERSET>">
30 <!ENTITY REG SDATA "<CHARACTERSET symbol><0xE2></CHARACTERSET>">
31 <!ENTITY TM SDATA "<CHARACTERSET symbol><0xE4></CHARACTERSET>">
32 <!ENTITY ELLIPSIS SDATA "<CHARACTERSET symbol><0xBC></CHARACTERSET>">
33 <!ENTITY VELLIPSIS SDATA
39 <!ENTITY PELLIPSIS SDATA "....">
40 <!ENTITY A.M. SDATA "a.m.">
41 <!ENTITY P.M. SDATA "p.m.">
42 <!ENTITY MINUTES SDATA "<CHARACTERSET symbol><0xA2></CHARACTERSET>">
43 <!ENTITY SECONDS SDATA "<CHARACTERSET symbol><0xB2></CHARACTERSET>">
44 <!ENTITY DEG SDATA "<CHARACTERSET symbol><0xB0></CHARACTERSET>">
45 <!ENTITY SQUOTE SDATA "`">
46 <!ENTITY DQUOTE SDATA '"'>
47 <!ENTITY ENDASH SDATA "-">
48 <!ENTITY EMDASH SDATA " <CHARACTERSET symbol><0xBE></CHARACTERSET> ">
49 <!ENTITY VBLANK SDATA "_">
50 <!ENTITY CENTS SDATA "<CHARACTERSET iso8859-1><0xA2></CHARACTERSET>">
51 <!ENTITY STERLING SDATA "<CHARACTERSET iso8859-1><0xA3></CHARACTERSET>">
53 <!ENTITY SIGSPACE SDATA "\ ">
54 <!ENTITY MICRO SDATA "u">
55 <!ENTITY OHM SDATA "ohm">
56 <!ENTITY UP SDATA "up arrow">
57 <!ENTITY DOWN SDATA "down arrow">
58 <!ENTITY LEFT SDATA "\<-">
59 <!ENTITY RIGHT SDATA "->">
60 <!ENTITY HOME SDATA "home key">
61 <!ENTITY BACK SDATA "\<--">
62 <!ENTITY DATE SDATA CODE>
68 nseconds = time(NULL);
69 timefoo = localtime(&nseconds);
70 strftime(s, maxsize, "%x", timefoo);
71 fprintf(outfile, "%s\n", s);
73 <!ENTITY TIME SDATA CODE>
79 nseconds = time(NULL);
80 timefoo = localtime(&nseconds);
81 strftime(s, maxsize, "%X", timefoo);
82 fprintf(outfile, "%s\n", s);
84 <!ENTITY HALFSPACE SDATA " ">
85 <!ENTITY M-SPECCHAR SDATA "Special characters">
87 /* entities for service documentation, not in doctype */
89 *<!ENTITY INSTMAN SDATA "Refer to innstruction manual.">
90 *<!ENTITY HAZVOLT SDATA "Hazardous voltage.">
91 *<!ENTITY GROUND SDATA "Ground.">
92 *<!ENTITY DCVOLT SDATA "DC voltage.">
93 *<!ENTITY NEGPULSE SDATA "Negative pulse.">
94 *<!ENTITY POSPULSE SDATA "Positive pulse.">
95 *<!ENTITY SINEWAVE SDATA "Sine wave.">
96 *<!ENTITY SAWWAVE SDATA "Saw wave.">
97 *<!ENTITY RAMPWAVE SDATA "Ramp wave.">
98 *<!ENTITY TRIWAVE SDATA "Triangle wave.">
99 *<!ENTITY SQWAVE SDATA "Square wave.">
101 /*<!ENTITY calcent FILE "calc.ent">*/
103 /* Code entities for toggling debugging traces */
104 <!ENTITY m-aopt PI CODE>
105 m_malftrace = (LOGICAL) ! m_malftrace ;
108 <!ENTITY m-copt PI CODE>
109 m_chtrace = (LOGICAL) ! m_chtrace ;
112 <!ENTITY m-dopt PI CODE>
113 m_cdtrace = (LOGICAL) ! m_cdtrace ;
116 <!ENTITY m-hopt PI CODE>
117 m_heapchk = (LOGICAL) ! m_heapchk ;
120 <!ENTITY m-oopt PI CODE>
121 tracetostd = (LOGICAL) ! tracetostd ;
124 /* This option pertains to automatic index processing only (called by the
125 scripts only), so we don't need it in pi's.
127 <!ENTITY m-popt PI CODE>
128 parentsrch = (LOGICAL) ! parentsrch ;
133 <!ENTITY m-sopt PI CODE>
134 m_scantrace = (LOGICAL) ! m_scantrace ;
137 <!ENTITY m-topt PI CODE>
138 m_tagtrace = (LOGICAL) ! m_tagtrace ;
141 /* This option does not pertain to a given document, so we don't
144 <!ENTITY m-xopt PI CODE>
145 showmem = (LOGICAL) ! showmem ;
149 /* Code entities for MARKUP and HP Tag versions */
150 <!ENTITY m-markup-ver SDATA CODE>
152 M_WCHAR *wc_1, *wc_2;
154 wc_1 = MakeWideCharString(M_VERSION);
155 wc_2 = MakeWideCharString("m-markup-ver");
156 m_piaction(wc_1, wc_2, M_SDATA) ;
157 m_free(wc_1,"wide character string");
158 m_free(wc_2,"wide character string");
162 <!ENTITY m-tagver SDATA CODE>
164 M_WCHAR *wc_1, *wc_2;
166 wc_1 = MakeWideCharString(version);
167 wc_2 = MakeWideCharString("m-tagver");
168 m_piaction(wc_1, wc_2, M_SDATA) ;
169 m_free(wc_1,"wide character string");
170 m_free(wc_2,"wide character string");
174 <!ENTITY m-machine SDATA CODE>
176 m_piaction("VECTRA", "m-machine", M_SDATA) ;
180 M_WCHAR *wc_1, *wc_2;
182 wc_1 = MakeWideCharString("HPUX");
183 wc_2 = MakeWideCharString("m-machine");
184 m_piaction(wc_1, wc_2, M_SDATA) ;
185 m_free(wc_1,"wide character string");
186 m_free(wc_2,"wide character string");
191 M_WCHAR *wc_1, *wc_2;
193 wc_1 = MakeWideCharString("AIX");
194 wc_2 = MakeWideCharString("m-machine");
195 m_piaction(wc_1, wc_2, M_SDATA) ;
196 m_free(wc_1,"wide character string");
197 m_free(wc_2,"wide character string");
202 M_WCHAR *wc_1, *wc_2;
204 wc_1 = MakeWideCharString("SUN");
205 wc_2 = MakeWideCharString("m-machine");
206 m_piaction(wc_1, wc_2, M_SDATA) ;
207 m_free(wc_1,"wide character string");
208 m_free(wc_2,"wide character string");
211 m_piaction("UNDEFINED MACHINE",
220 <SIGN-ON>HP HelpTag Formatting System. - Version A.01.00 (DTD Version A.01.23)
224 static char ident1[]="@(#)Help Tag Parser";
225 static char ident2[]="@(#)Version Number: A.01.00";
226 static char ident3[]="@(#)Copyright (c) 1993 Hewlett-Packard Company. All rights reserved.";
236 /* Pick version number out of sign-on message */
237 if (p = strstr(m_signon, VERSION)) {
238 p += strlen(VERSION) + 1 ;
239 for (q = p ; *q && *q != '\n'; q++) ;
241 version = (char *) m_malloc(q - p + 1, "version") ;
248 /* Following: please refer to comments in custom.c, m_setoptions() */
250 if ((strchr(m_argv[2], 'p')) || (strchr(m_argv[2], 'P')))
251 parentsrch = TRUE ; /* Implies we are processing indexes */
254 helpcharset = MakeWideCharString("iso8859-1");
259 if (m_errexit && stoponerror) m_exit(m_errexit) ;
262 new = (SEARCH *) m_malloc(sizeof(SEARCH), "search path") ;
263 new->directory = indir ;
270 prebye = ftell(outfile) ;
271 fseek(outfile, texcomplete, SEEK_SET) ;
272 fseek(outfile, 0L, SEEK_END) ;
274 if (glossary) checkgloss() ;
277 fprintf(outfile, "</TOPIC>\n");
279 /* finish topic map */
281 fputs("\n", topicmapfp);
282 while (lastnodelevel--) {
283 /* indent routine >here< */
284 for (i = lastnodelevel; i > 0; i--) { fputs(" ", topicmapfp); }
285 fputs("}\n", topicmapfp);
288 /* polish up .hmi file */
290 fprintf(docregfp, "*title:\t\"No title specified.\"\n");
292 /* else -- handled in element title */
295 fprintf(docregfp, "*abstract:\t\"No abstract specified.");
299 mb_savedtitle = MakeMByteString(savedtitle);
300 fprintf(docregfp, " Title was ``%s''.", mb_savedtitle);
301 m_free(mb_savedtitle,"multi-byte string");
303 fprintf(docregfp, "\"\n");
305 /* else -- handled in element abstract */
307 fprintf(docregfp, "*version:\t\"%s\"\n", version);
312 mb_charset = MakeMByteString(helpcharset);
313 fprintf(docregfp, "*charSet:\t%s\n", mb_charset);
314 m_free(mb_charset, "multi-byte string");
317 /* warn if we have forward xrefs */
318 if (have_forward_xrefs) {
323 outchar(m_textchar, outfile) ;
326 outpi(m_enttype, m_pi, m_entname) ;
331 where = WHERE (QTOC = TOC,
334 <START-CODE CHAPHEAD RSUB>
336 <START-CODE CHAPHEAD RSECT>
339 (! m_wcmbupstrcmp(where, QFOOTER) ||
340 ! m_wcmbupstrcmp(where, QBOTH)) ;
346 fputs("<ABBREV>", outfile);
347 <START-CODE CAPTION, CHAPHEAD MSGSUB>
349 <START-CODE CHAPHEAD CHAPTER, CHAPHEAD APPENDIX, CHAPTER MESSAGE,
350 CHAPHEAD TEST, CHAPHEAD S1, CHAPHEAD S2, CHAPHEAD S3,
351 CHAPHEAD S4, CHAPHEAD S5, CHAPHEAD S6, CHAPHEAD S7,
352 CHAPHEAD S8, CHAPHEAD S9, CHAPHEAD HOMETOPIC>
355 (! m_wcmbupstrcmp(where, QFOOTER) ||
356 ! m_wcmbupstrcmp(where, QBOTH)) ;
360 fputs("<ABBREV>", outfile);
362 M_WCHAR *wc_stago, *wc_tagc;
364 wc_stago = MakeWideCharString(m_stago);
365 wc_tagc = MakeWideCharString(m_tagc);
369 (! m_wcmbupstrcmp(where, QFOOTER) ||
370 ! m_wcmbupstrcmp(where, QBOTH)) ;
374 m_err2("Unimplemented %sABBREV%s reached", wc_stago, wc_tagc);
375 m_free(wc_stago,"wide character string");
376 m_free(wc_tagc,"wide character string");
380 <END-CODE CHAPHEAD RSECT,
381 CHAPHEAD CHAPTER, CHAPHEAD APPENDIX, CHAPTER MESSAGE,
382 CHAPHEAD TEST, CHAPHEAD S1, CHAPHEAD S2, CHAPHEAD S3,
383 CHAPHEAD S4, CHAPHEAD S5, CHAPHEAD S6, CHAPHEAD S7,
384 CHAPHEAD S8, CHAPHEAD S9, CHAPHEAD HOMETOPIC>
387 fputs("</ABBREV>\n", outfile);
392 M_WCHAR *wc_abstract;
394 wc_abstract = MakeWideCharString("_ABSTRACT");
397 needabstracthead = TRUE;
398 starthelpnode(wc_abstract, TRUE);
399 fputs("*abstract:\t", docregfp);
400 m_free(wc_abstract,"wide character string");
402 fputs("\n", docregfp);
404 outchar(m_textchar, outfile);
405 if (m_textchar == '\n') {
406 fputs(" \\\n", docregfp);
409 char mb_textchar[32];
412 length = wctomb(mb_textchar, m_textchar);
413 mb_textchar[length] = '\0';
414 fputs(mb_textchar, docregfp) ;
420 mb_echohead(m_stago);
421 echohead(m_parent(0)) ;
425 if (echo) mb_echohead(m_net) ;
427 <START-CODE * IDX, * IDXSYN>
428 <END-CODE * IDX, * IDXSYN>
429 <END-CODE * EXAMPLESEG, * IMAGE>
431 <TEXT-CODE * IDX, * IDXSYN>
432 indexchar(m_textchar) ;
434 outchar(wc_toupper(m_textchar), outfile) ;
438 fputs("<TYPE serif><ANGLE italic><SPACING p>\n", outfile);
440 fputs("</SPACING></ANGLE></TYPE>\n", outfile);
449 appstart(id, letter) ;
451 starthelpnode(id, FALSE);
460 /* when implementing: */
461 /* (1) Don't forget need begin/end */
462 /* (2) Check code for <ITEM> */
463 /* (3) Suppression of need between head and text? */
464 /* (4) Consider if missing rev end check needed */
474 GetDefaultHeaderString("BinderNumberElementDefaultHeadingString",
478 mb_starthelpnode("_BINDERNO", TRUE);
480 "<TITLE><TYPE serif><WEIGHT bold><SIZE 14>%s</SIZE></WEIGHT></TYPE></TITLE>\n\n",
482 fputs("<PARAGRAPH>", outfile);
483 m_free(string, "default header string return");
485 fputs("</PARAGRAPH>\n\n", outfile);
489 mb_strcode("<TYPE serif><ANGLE italic>", outfile) ;
491 mb_echohead(m_stago) ;
492 echohead(m_parent(0)) ;
496 mb_strcode("</ANGLE></TYPE>", outfile) ;
497 if (echo) mb_echohead(m_net) ;
499 <START-CODE * IDX, * IDXSYN>
500 <END-CODE * IDX, * IDXSYN>
501 <TEXT-CODE * IDX, * IDXSYN>
502 indexchar(m_textchar) ;
512 fputs("<WEIGHT bold>", outfile);
514 savehead[svheadlen] = M_EOS ;
517 fputs("</WEIGHT>", outfile);
525 <START-CODE TEXT ITEM>
527 /* In a tight list, paragraphs will have no trailing blank line.
528 * To match HPTag behavior, we need to emit a blank line and
529 * supress the leading blank line of the next paragraph, figure,
530 * example, etc., if any.
533 if ((lastlist->lastlist->space == TIGHT) &&
534 (lastlist->lastlist->where == INSIDE)) {
535 ncwTightList = " before 1";
546 fputs("</PARAGRAPH>\n\n", outfile);
547 lastlist->lastlist->where = FOLLOW; /* supress leading newline */
549 fputs("</PARAGRAPH>\n\n", outfile);
556 startrow = STARTROW ;
563 /* ignore data chars meant only for cdrom */
564 /* we need CDROMsaveoutfile and can't just say m_outfile,
565 since we may be inside a table that has already
566 been sending things to nullfile and it would be incorrect
567 to start sending to m_outfile now. I.e., if outfile is
568 currently nullfile, we keep sending to nullfile in the
570 CDROMsaveoutfile = outfile;
573 /* OK, let the data flow. CDROM is ending. */
574 outfile = CDROMsaveoutfile;
584 emsghead = USERHEAD ;
593 assert_hometopic_exists();
594 chapstart(id, number, "chapter") ; /* opens new help file, too */
596 starthelpnode(id, FALSE);
603 if (echo) mb_echohead("((") ;
604 mb_strcode("(", outfile) ;
605 outchar (m_textchar, outfile) ;
606 mb_strcode(")", outfile) ;
607 if (echo) mb_echohead("))") ;
608 <START-CODE * IDX, * IDXSYN>
609 <END-CODE * IDX, * IDXSYN>
610 <TEXT-CODE * IDX, * IDXSYN>
612 indexchar(m_textchar) ;
635 mb_strcode("<TYPE serif><SPACING m>", outfile);
636 if (echo) mb_echohead("``") ;
639 mb_strcode("</SPACING></TYPE>", outfile);
640 if (echo) mb_echohead("''") ;
642 esoutchar(m_textchar) ;
644 exoutchar(m_textchar) ;
645 <TEXT-CODE * EXAMPLESEG>
646 exoutchar(m_textchar) ;
648 <START-CODE * IDX, * IDXSYN>
649 <END-CODE * IDX, * IDXSYN>
650 <TEXT-CODE * IDX, * IDXSYN>
651 indexchar(m_textchar) ;
653 <ELEMENT CONVENTIONS>
658 mb_starthelpnode("_CONVENTIONS", TRUE);
662 mb_starthelpnode("_COPYRIGHT", TRUE);
663 fprintf(outfile, "<TITLE></TITLE>\n");
664 /* No Head. Let author have a clean slate. */
669 GetDefaultHeaderString("CountryElementDefaultHeadingString",
673 mb_starthelpnode("_COUNTRY", TRUE);
674 fprintf(outfile, "<TITLE><TYPE serif><WEIGHT bold><SIZE 14>%s</SIZE></WEIGHT></TYPE></TITLE>\n\n", string);
675 fputs("<PARAGRAPH>", outfile);
676 m_free(string, "default header string return");
678 fputs("</PARAGRAPH>\n\n", outfile);
685 graphics = GRAPHICS (QNOGRAPHICS = NOGRAPHICS,
686 QGRAPHICS = GRAPHICS) ;
693 mb_echohead(m_stago) ;
694 echohead(m_parent(0)) ;
698 if (echo) mb_echohead(m_net) ;
699 <START-CODE * OUTPUT...., * INPUT.....>
701 mb_echohead(m_stago) ;
702 echohead(m_parent(0)) ;
706 esoutchar(m_textchar) ;
714 mb_parent = MakeMByteString(m_parent(0));
715 notimp(mb_parent, "BIG/SMALL page styles") ;
716 m_free(mb_parent,"multi-byte string");
718 outfile = m_outfile ;
722 type = TYPE (QKEYS2 = KEYS2,
723 QCOMMAND = COMMAND) ;
724 graphics = GRAPHICS (QNOGRAPHICS = NOGRAPHICS,
725 QGRAPHICS = GRAPHICS) ;
726 displines = DISPLINES (QTWO = TWO,
733 mb_parent = MakeMByteString(m_parent(0));
734 notimp(mb_parent, "BIG/SMALL page styles") ;
735 m_free(mb_parent,"multi-byte string");
737 outfile = m_outfile ;
742 mb_echohead(m_stago) ;
743 echohead(m_parent(0)) ;
747 if (echo) mb_echohead(m_net) ;
749 esoutchar(m_textchar) ;
750 <TEXT-CODE * EXAMPLESEG>
751 exoutchar(m_textchar) ;
753 <START-CODE * IDX, * IDXSYN>
754 <END-CODE * IDX, * IDXSYN>
755 <TEXT-CODE * IDX, * IDXSYN>
756 indexchar(m_textchar) ;
760 calcqrgwidth = CALCQRGWIDTH ;
761 ctbltype = CTBLTYPE (QKEYS2 = KEYS2,
762 QCOMMAND = COMMAND) ;
763 ctblgraphics = CTBLGRAPHICS (QNOGRAPHICS = NOGRAPHICS,
764 QGRAPHICS = GRAPHICS) ;
765 ctbldisplines = CTBLDISPLINES (QTWO = TWO,
769 extype = EXTYPE (QCOMPUTER = COMPUTER,
770 QDISPLAY = DISPLAY) ;
771 expos = EXPOS (QLEFT = LEFT,
774 exnotes = EXNOTES (QSIDE = SIDE,
776 exlines = EXLINES (QNUMBER = NUMBER,
777 QNONUMBER = NONUMBER) ;
778 extextsize = EXTEXTSIZE (QNORMAL = NORMAL,
780 QSMALLEST = SMALLEST) ;
781 gloss = GLOSS (QGLOSS = GLOSS,
782 QNOGLOSS = NOGLOSS) ;
783 type = LISTTYPE (QORDER = ORDER,
788 order = LISTORDERTYPE (QUALPHA = UALPHA,
793 spacing = LISTSPACING (QTIGHT = TIGHT,
795 longlabel = LONGLABEL (QWRAP = WRAP,
797 labelwidth = LABELWIDTH ;
798 tableborder = TABLEBORDER (QBOX = BOX,
800 tablerule = TABLERULE ;
805 tablespacing = TABLESPACING (QTIGHT = TIGHT,
807 tablepos = TABLEPOS (QLEFT = LEFT,
810 tabwidth = TABLEWIDTH (QFULL = FULL) ;
811 tabletextsize = TABLETEXTSIZE (QNORMAL = NORMAL,
813 QSMALLEST = SMALLEST) ;
814 notab = NUMBERTABLES (QNUMBER = NUMBER,
815 QNONUMBER = NONUMBER) ;
816 figtype = FIGTYPE (QART = ART,
824 oldfigtype = OLDFIGTYPE (QART = ART,
829 figmagnify = FIGMAGNIFY (QFIT = FIT) ;
830 figwidth = FIGWIDTH (QFULL = FULL,
832 QCURRENT = CURRENT) ;
833 figheight = FIGHEIGHT (QNATURAL = NATURAL) ;
834 figborder = FIGBORDER (QTOP = TOP,
839 figvideo = FIGVIDEO (QINVERSE = INVERSE,
840 QNOINVERSE = NOINVERSE) ;
841 figstrip = FIGSTRIP (QSTRIP = STRIP,
842 QNOSTRIP = NOSTRIP) ;
843 figmargin = FIGMARGIN ;
845 figpenwidth = FIGPENWIDTH ;
846 figsnap = FIGSNAP (QSNAP = SNAP,
848 figautoscale = FIGAUTOSCALE (QAUTOSCALE = AUTOSCALE,
849 QNOAUTOSCALE = NOAUTOSCALE) ;
850 figplottype = FIGPLOTTYPE ;
851 listtextsize = LISTTEXTSIZE (QNORMAL = NORMAL,
853 QSMALLEST = SMALLEST) ;
854 nofig = NUMBERFIGS (QNUMBER = NUMBER,
855 QNONUMBER = NONUMBER) ;
856 eqn = EQN (QTEX = TEX) ;
857 rsectp = RSECTPAGEBREAK (QNEWPAGE = NEWPAGE,
858 QSAMEPAGE = SAMEPAGE) ;
862 fputs("</PARAGRAPH>\n\n", outfile);
866 <ELEMENT DISPLAY> /* we are not handling calculator here */
868 mb_strcode("<TYPE serif><SPACING m>", outfile);
869 if (echo) mb_echohead("::") ;
872 mb_strcode("</SPACING></TYPE>", outfile);
873 if (echo) mb_echohead("::") ;
875 esoutchar(m_textchar) ;
876 <TEXT-CODE * EXAMPLESEG>
877 exoutchar(m_textchar) ;
879 <START-CODE * IDX, * IDXSYN>
880 <END-CODE * IDX, * IDXSYN>
881 <TEXT-CODE * IDX, * IDXSYN>
882 indexchar(m_textchar) ;
892 /* trim possible (perhaps) last space */
893 if (termp - term > 1 && *(termp-1) == ' ') {
896 if (m_ntrtrie(term, >ree, (M_TRIE *) DEFINETERM)) {
897 if (! m_resettrie(>ree, term, (M_TRIE *) DEFINETERM)) {
898 m_error("Internal error. Can't reset glossary trie") ;
902 fputs("<PARAGRAPH after 0 leftindent 3 id \"", outfile);
903 for (p = term; *p ; p++) {
905 outchar('_', outfile);
908 outchar(wc_toupper(*p), outfile);
911 fputs("_DEF\">", outfile);
912 /* handle .idt file, too */
916 mb_nodeid = MakeMByteString(nodeid);
917 fprintf(idtablefp, "%s> ", mb_nodeid);
918 m_free(mb_nodeid,"multi-byte string");
920 for (p = term; *p ; p++) {
922 fputc('_', idtablefp);
926 char mb_uwc[32]; /* arbitrarily large */
929 uwc = wc_toupper(*p);
930 length = wctomb(mb_uwc, uwc);
931 mb_uwc[length] = '\0';
932 fputs(mb_uwc, idtablefp);
935 fputs("_DEF\n", idtablefp);
937 fputs("<WEIGHT bold>", outfile);
938 for(p = term; *p; p++) {
939 outchar(*p, outfile) ;
941 fputs("</WEIGHT>", outfile);
943 termchar(m_textchar) ;
945 termpi(m_enttype, m_pi, m_entname) ;
950 GetDefaultHeaderString("EditionElementDefaultHeadingString",
954 mb_starthelpnode("_EDITION", TRUE);
955 fprintf(outfile, "<TITLE><TYPE serif><WEIGHT bold><SIZE 14>%s</SIZE></WEIGHT></TYPE></TITLE>\n\n", string);
956 fputs("<PARAGRAPH>", outfile);
957 m_free(string, "default header string return");
959 fputs("</PARAGRAPH>\n\n", outfile);
963 mb_strcode("<ANGLE italic>", outfile) ;
964 if (echo) mb_echohead("!!") ;
966 mb_strcode("</ANGLE>", outfile) ;
967 if (echo) mb_echohead("!!") ;
969 <START-CODE * IDX, * IDXSYN>
970 <END-CODE * IDX, * IDXSYN>
971 <TEXT-CODE * IDX, * IDXSYN>
972 indexchar(m_textchar) ;
974 <ELEMENT ENTRYPOINTSET>
976 mb_starthelpnode("_ENTRYPOINTSET", TRUE);
977 fprintf(outfile, "<PARAGRAPH><TYPE serif><WEIGHT bold><SIZE 14>%s</SIZE></WEIGHT></TYPE></PARAGRAPH>\n\n", "Entrypointset");
983 formatter = FORMATTER (QTEX = TEX) ;
985 fputs("<PARAGRAPH>", outfile);
988 fputs("</PARAGRAPH>\n", outfile);
991 <START-CODE * IDX, * IDXSYN>
992 <END-CODE * IDX, * IDXSYN>
993 <TEXT-CODE * IDX, * IDXSYN>
994 indexchar(m_textchar) ;
997 mb_echohead(m_stago) ;
998 echohead(m_parent(0)) ;
1002 if (echo) mb_echohead(m_net) ;
1006 type = TYPE (QCOMPUTER = COMPUTER,
1007 QDISPLAY = DISPLAY) ;
1008 position = POSITION (QLEFT = LEFT,
1011 notes = NOTES (QSIDE = SIDE,
1014 lines = LINES (QNUMBER = NUMBER,
1015 QNONUMBER = NONUMBER) ;
1016 textsize = TEXTSIZE (QNORMAL = NORMAL,
1018 QSMALLEST = SMALLEST) ;
1019 <START-CODE TEXT ITEM>
1020 /* In a tight list, paragraphs will have no trailing blank line.
1021 * To match HPTag behavior, we need to emit a blank line and
1022 * supress the leading blank line of the next paragraph, figure,
1023 * example, etc., if any.
1028 if ((lastlist->lastlist->space == TIGHT) &&
1029 (lastlist->lastlist->where == INSIDE)) {
1030 listinfo = " before 1";
1033 exvexstart(type, textsize, listinfo);
1034 tonumexlines = (LOGICAL) (vnumber(lines) == NUMBER);
1037 exvexstart(type, textsize, "") ;
1038 tonumexlines = (LOGICAL) (vnumber(lines) == NUMBER);
1040 <END-CODE TEXT ITEM>
1041 /* Clear tonumexlines for other elements (e.g., image) which may
1043 tonumexlines = FALSE ;
1045 lastlist->lastlist->where = FOLLOW; /* supress leading newline */
1047 /* Clear tonumexlines for other elements (e.g., image) which may
1049 tonumexlines = FALSE ;
1052 <ELEMENT EXAMPLESEG>
1054 if (tonumexlines) fprintf(outfile, " %d: ", exlineno) ;
1058 exoutchar(m_textchar) ;
1065 GetDefaultHeaderString("FichenoElementDefaultHeadingString",
1069 mb_starthelpnode("_FICHENO", TRUE);
1070 fprintf(outfile, "<TITLE><TYPE serif><WEIGHT bold><SIZE 14>%s</SIZE></WEIGHT></TYPE></TITLE>\n\n", string);
1071 fputs("<PARAGRAPH>", outfile);
1072 m_free(string, "default header string return");
1074 fputs("</PARAGRAPH>\n\n", outfile);
1080 M_WCHAR *wc_stago, *wc_tagc;
1082 wc_stago = MakeWideCharString(m_stago);
1083 wc_tagc = MakeWideCharString(m_tagc);
1084 m_err3("%s%s%s allowed only in ART figures",
1088 m_free(wc_stago,"wide character string");
1089 m_free(wc_tagc,"wide character string");
1095 M_WCHAR *wc_stago, *wc_tagc;
1097 wc_stago = MakeWideCharString(m_stago);
1098 wc_tagc = MakeWideCharString(m_tagc);
1101 M_WCHAR *wc_stago, *wc_tagc;
1103 wc_stago = MakeWideCharString(m_stago);
1104 wc_tagc = MakeWideCharString(m_tagc);
1105 m_err3("%s%s%s allowed only in TEXT figures",
1109 m_free(wc_stago,"wide character string");
1110 m_free(wc_tagc,"wide character string");
1116 tonumber = TONUMBER (QNUMBER = NUMBER,
1117 QNONUMBER = NONUMBER) ;
1120 figpos = FIGPOS (QLEFT = LEFT,
1123 cappos = CAPPOS (QLEFT = LEFT,
1126 oldtype = OLDTYPE (QART = ART,
1131 xwidth = WIDTH (QFULL = FULL,
1133 QCURRENT = CURRENT) ;
1134 xdepth = HEIGHT (QNATURAL = NATURAL) ;
1135 xhadjust = HADJUST ;
1136 xvadjust = VADJUST ;
1137 border = BORDER (QTOP = TOP,
1142 type = TYPE (QART = ART,
1150 xmagnify = MAGNIFY (QFIT = FIT) ;
1151 video = VIDEO (QINVERSE = INVERSE,
1152 QNOINVERSE = NOINVERSE) ;
1153 strip = STRIP (QSTRIP = STRIP,
1154 QNOSTRIP = NOSTRIP) ;
1155 mirror = MIRROR (QMIRROR = MIRROR) ;
1158 penwidth = PENWIDTH ;
1159 snap = SNAP (QSNAP = SNAP,
1161 autoscale = AUTOSCALE (QAUTOSCALE = AUTOSCALE,
1162 QNOAUTOSCALE = NOAUTOSCALE) ;
1163 plottype = PLOTTYPE ;
1165 textsize = TEXTSIZE (QNORMAL = NORMAL,
1167 QSMALLEST = SMALLEST) ;
1168 ghyperlink = GHYPERLINK ;
1169 glinktype = GLINKTYPE (QJUMP = JUMP,
1170 QJUMPNEWVIEW = JUMPNEWVIEW,
1171 QDEFINITION = DEFINITION,
1173 QAPPDEFINED = APPDEFINED,
1175 gdescription = GDESCRIPTION ;
1176 <START-CODE TEXT ITEM>
1177 /* In a tight list, paragraphs will have no trailing blank line.
1178 * To match HPTag behavior, we need to emit a blank line and
1179 * supress the leading blank line of the next paragraph, figure,
1180 * example, etc., if any.
1185 if ((lastlist->lastlist->space == TIGHT) &&
1186 (lastlist->lastlist->where == INSIDE)) {
1187 listinfo = " before 1";
1249 <END-CODE TEXT ITEM>
1250 fputs("\n</FIGURE>\n</PARAGRAPH>\n\n", outfile);
1253 char *mb_nodeid, *mb_id;
1255 mb_nodeid = MakeMByteString(nodeid);
1256 mb_id = MakeMByteString(id);
1257 fprintf(idtablefp, "%s> %s\n", mb_nodeid, mb_id);
1258 m_free(mb_nodeid,"multi-byte string");
1259 m_free(mb_id,"multi-byte string");
1261 lastlist->lastlist->where = FOLLOW; /* supress leading newline */
1263 fputs("\n</FIGURE>\n</PARAGRAPH>\n\n", outfile);
1266 char *mb_nodeid, *mb_id;
1268 mb_nodeid = MakeMByteString(nodeid);
1269 mb_id = MakeMByteString(id);
1270 fprintf(idtablefp, "%s> %s\n", mb_nodeid, mb_id);
1271 m_free(mb_nodeid,"multi-byte string");
1272 m_free(mb_id,"multi-byte string");
1278 length = LENGTH (QEND = END) ;
1280 if (m_wcmbupstrcmp(length, QEND))
1284 mb_parent = MakeMByteString(m_parent(0));
1285 if (mb_checkdimen( length, "LENGTH", mb_parent ))
1287 /* check for negative values */
1290 mbtowc(&wmi, "-", 1);
1291 if (w_strchr(length, wmi))
1293 M_WCHAR *wc_stago, *wc_tagc;
1295 wc_stago = MakeWideCharString(m_stago);
1296 wc_tagc = MakeWideCharString(m_tagc);
1297 m_err3("Negative value [%s] for %sFILLIN%s, positive assumed",
1301 m_free(wc_stago,"wide character string");
1302 m_free(wc_tagc,"wide character string");
1305 m_free(mb_parent,"multi-byte string");
1310 /* Headers and footers make no sense to Cache Creek; throw away
1311 * all content. We could do this with empty text-code here and
1312 * context sensitive empty text-code in all elements of the model
1313 * group that define their own text-code but that's really error
1314 * prone and difficult to maintain.
1316 HFsaveoutfile = outfile;
1319 outfile = HFsaveoutfile;
1322 /* When implementing, check conditionals of <FOOTNOTE> in <P> */
1323 <TEXT-CODE * EXAMPLESEG, * IMAGE>
1324 outchar(m_textchar, outfile) ;
1335 <START-CODE OTHERFRONT>
1336 if (!had_an_otherfront_head) {
1343 GetDefaultHeaderString("GlossaryElementDefaultHeadingString",
1347 open_new_helpfile();
1349 mb_starthelpnode("_GLOSSARY", FALSE);
1350 strcpy(chapstring, string) ;
1351 if (strlen(chapstring) + 1 > sizeof(chapstring)) {
1352 m_error("Program error: exceeded chapstring") ;
1355 fputs("\nGlossary\n", stderr) ;
1357 fprintf(outfile, "<TITLE><TYPE serif><WEIGHT bold><SIZE 14>%s</SIZE></WEIGHT></TYPE></TITLE>\n", string) ;
1358 m_free(string, "default header string return");
1367 unsigned char etype, wheredef ;
1368 /* Code from figstart */
1370 mbstowcs(xrefstring, "\\<xref graphic>", 400);
1371 xstrlen = w_strlen(xrefstring) ;
1372 m_getline(&xrffile, &xrfline) ;
1373 if (xrffile == NULL) {
1374 /* set to primary input source */
1375 xrffile = inputname;
1387 char *mb_nodeid, *mb_id;
1389 mb_nodeid = MakeMByteString(nodeid);
1390 mb_id = MakeMByteString(id);
1391 fprintf(idtablefp, "%s> %s\n", mb_nodeid, mb_id);
1392 m_free(mb_nodeid,"multi-byte string");
1393 m_free(mb_id,"multi-byte string");
1396 /* initialize some stuff first:
1397 - file is the entity name,
1398 - f_file is the content of the entity,
1399 used only if f_content nonNULL
1400 - f_content is f_file with the relative pathname, initialized to NULL,
1401 - f_contqual is fully qualified f_file, assigned ONLY IF
1406 f_contqual[0] = M_EOS ;
1408 /* check ENTITY and determine the figure type */
1410 m_lookent(file, &etype, &f_file, &wheredef) ;
1411 if (etype != M_SYSTEM) {
1412 M_WCHAR *wc_stago, *wc_tagc, *wc_entsystem, *wc_entkw;
1414 wc_stago = MakeWideCharString(m_stago);
1415 wc_tagc = MakeWideCharString(m_tagc);
1416 wc_entsystem = MakeWideCharString(m_entsystem);
1417 wc_entkw = MakeWideCharString(m_entkw);
1418 m_err6("%s not a %s %s, as required for the ENTITY parameter of %s%s%s",
1425 m_free(wc_stago,"wide character string");
1426 m_free(wc_tagc,"wide character string");
1427 m_free(wc_entsystem,"wide character string");
1428 m_free(wc_entkw,"wide character string");
1432 f_content = searchforfile(f_file) ;
1434 if (getqualified(f_contqual, f_content)) {
1435 /* unsuccessful qual */
1436 if (w_strlen(f_content) < FNAMELEN)
1437 w_strcpy(f_contqual, f_content) ;
1439 m_err1("Internal error. File name too long: %s", f_content) ;
1445 m_err2("Can't find file %s (declared in entity %s)", f_file, file) ;
1452 static M_WCHAR empty = M_EOS;
1454 if (!f_content) f_content = ∅
1456 mb_content = MakeMByteString(f_content);
1457 fprintf(outfile, "<GRAPHIC file %s", mb_content);
1458 m_free(mb_content,"multi-byte string");
1463 mb_id = MakeMByteString(id);
1464 fprintf(outfile, " id %s", mb_id);
1465 m_free(mb_id,"multi-byte string");
1467 fputs(">", outfile);
1472 GetDefaultHeaderString("HardwareElementDefaultHeadingString",
1476 mb_starthelpnode("_HARDWARE", TRUE);
1477 fprintf(outfile, "<TITLE><TYPE serif><WEIGHT bold><SIZE 14>%s</SIZE></WEIGHT></TYPE></TITLE>\n\n", string);
1479 fputs("<PARAGRAPH>", outfile);
1480 m_free(string, "default header string return");
1482 fputs("</PARAGRAPH>\n\n", outfile);
1485 /* Accent headings */
1486 <START-CODE NOTE, CAUTION, WARNING>
1489 fprintf(outfile, ncwStart, ncwTightList);
1490 /* Other headings */
1493 fputs("<PARAGRAPH><TYPE serif><WEIGHT bold>", outfile);
1494 /* Other headings */
1497 fputs("<PARAGRAPH><TYPE serif><WEIGHT bold>", outfile);
1498 /* Other headings */
1499 <START-CODE LIST, LABLIST, EX, SYNTAX>
1501 fputs("<PARAGRAPH><TYPE serif><WEIGHT bold>", outfile);
1503 <START-CODE CHAPHEAD APPENDIX, CHAPHEAD CHAPTER,
1504 CHAPHEAD RSECT, CHAPHEAD S1, CHAPHEAD S2, CHAPHEAD S3,
1505 CHAPHEAD S4, CHAPHEAD S5, CHAPHEAD S6, CHAPHEAD S7,
1506 CHAPHEAD S8, CHAPHEAD S9, CHAPHEAD TEST, CHAPHEAD BIBLIO,
1514 fputs("<TITLE><TYPE serif><WEIGHT bold><SIZE 14>", outfile);
1515 /* Non node headings */
1516 <START-CODE OTHERHEAD, CHAPHEAD RSUB, CHAPHEAD MSGSUB>
1522 fputs("<PARAGRAPH><TYPE serif><WEIGHT bold><SIZE 12>", outfile);
1523 /* Other headings */ /* notably procedure */
1524 <START-CODE CHAPHEAD PROCEDURE>
1530 fputs("<PARAGRAPH><TYPE serif><WEIGHT bold>", outfile);
1531 /* Other headings */
1532 <START-CODE CHAPHEAD>
1533 M_WCHAR *wc_stago, *wc_tagc;
1535 wc_stago = MakeWideCharString(m_stago);
1536 wc_tagc = MakeWideCharString(m_tagc);
1537 m_err2("Unimplemented %sCHAPHEAD%s reached", wc_stago, wc_tagc);
1538 m_free(wc_stago,"wide character string");
1539 m_free(wc_tagc,"wide character string");
1542 /* Non-node headings */
1543 <START-CODE FRONTSUB>
1546 fputs("<PARAGRAPH><TYPE serif><WEIGHT bold><SIZE 12>", outfile);
1547 /* Non-node headings */
1548 <START-CODE LEGAL, SAFETY, MAP, ABSTRACT, PREFACE, CONVENTIONS, HISTORY>
1551 needabstracthead = FALSE;
1552 fputs("<TITLE><TYPE serif><WEIGHT bold><SIZE 12>", outfile);
1554 <START-CODE OTHERFRONT>
1555 had_an_otherfront_head = TRUE;
1561 fputs("<TITLE><TYPE serif><WEIGHT bold><SIZE 14>", outfile);
1563 <START-CODE MESSAGE>
1566 /* Check MESSAGE, MSGSUB, BIBLIO, BIBSUB when implementing need begin */
1567 fputs("<TITLE><TYPE serif><WEIGHT bold><SIZE 14>", outfile);
1568 /* Other headings.*/
1569 <START-CODE BIBLIO, BIBSUB>
1572 /* Check MESSAGE, MSGSUB, BIBLIO, BIBSUB when implementing need begin */
1573 fputs("<PARAGRAPH><TYPE serif><WEIGHT bold><SIZE 12>", outfile);
1574 /* Accent headings */
1577 GetDefaultHeaderString("NoteElementDefaultIconFile", M_SYSTEM, "");
1579 fprintf(outfile, ncwEnd, "");
1582 fprintf(outfile, ncwGraphic, iconName);
1583 m_free(iconName, "icon name");
1587 GetDefaultHeaderString("CautionElementDefaultIconFile", M_SYSTEM, "");
1589 fprintf(outfile, ncwEnd, "");
1592 fprintf(outfile, ncwGraphic, iconName);
1593 m_free(iconName, "icon name");
1597 GetDefaultHeaderString("WarningElementDefaultIconFile", M_SYSTEM, "");
1599 fprintf(outfile, ncwEnd, "");
1602 fprintf(outfile, ncwGraphic, iconName);
1603 m_free(iconName, "icon name");
1606 fputs("\n\n", outfile);
1607 /* Other headings */
1609 fputs("</WEIGHT></TYPE></PARAGRAPH>\n\n", outfile);
1610 /* Other headings */
1611 <END-CODE LIST, LABLIST, EX, SYNTAX>
1612 fputs("</WEIGHT></TYPE></PARAGRAPH>\n\n", outfile);
1613 /* Other headings */
1615 fputs("</WEIGHT></TYPE></PARAGRAPH>\n\n", outfile);
1616 /* Non node headings */
1619 fputs("</SIZE></WEIGHT></TYPE></PARAGRAPH>\n\n", outfile);
1620 /* Non node headings */
1621 <END-CODE LEGAL, SAFETY, MAP, ABSTRACT, PREFACE, CONVENTIONS, HISTORY>
1623 fputs("</SIZE></WEIGHT></TYPE></TITLE>\n\n", outfile);
1624 /* Node headings. */
1625 <END-CODE OTHERFRONT>
1627 fputs("</SIZE></WEIGHT></TYPE></TITLE>\n", outfile);
1628 /* Node headings. */
1631 fputs("</SIZE></WEIGHT></TYPE></TITLE>\n", outfile);
1632 /* Other headings. */
1633 <END-CODE BIBLIO, BIBSUB>
1635 fputs("</WEIGHT></TYPE></PARAGRAPH>\n\n", outfile);
1636 /* Other headings */
1637 <END-CODE CHAPHEAD PROCEDURE>
1639 fputs("</WEIGHT></TYPE></PARAGRAPH>\n\n", outfile);
1640 /* Non node headings */
1641 <END-CODE CHAPHEAD MSGSUB>
1643 fputs("</SIZE></WEIGHT></TYPE></PARAGRAPH>\n\n", outfile);
1644 <END-CODE CHAPHEAD RSUB, OTHERHEAD>
1646 fputs("</SIZE></WEIGHT></TYPE></PARAGRAPH>\n\n", outfile);
1648 <END-CODE CHAPHEAD RSECT, CHAPHEAD S1, CHAPHEAD S2, CHAPHEAD S3,
1649 CHAPHEAD S4, CHAPHEAD S5, CHAPHEAD S6, CHAPHEAD S7,
1650 CHAPHEAD S8, CHAPHEAD S9, CHAPHEAD TEST, CHAPHEAD BIBLIO,
1653 fputs("</SIZE></WEIGHT></TYPE></TITLE>\n", outfile);
1655 <END-CODE CHAPHEAD CHAPTER>
1657 fputs("</SIZE></WEIGHT></TYPE></TITLE>\n", outfile);
1658 <END-CODE CHAPHEAD APPENDIX>
1660 fputs("</SIZE></WEIGHT></TYPE></TITLE>\n", outfile);
1661 <END-CODE CHAPHEAD MESSAGE>
1663 fputs("</SIZE></WEIGHT></TYPE></TITLE>\n", outfile);
1665 outchar(m_textchar, outfile) ;
1669 /* Headers and footers make no sense to Cache Creek; throw away
1670 * all content. We could do this with empty text-code here and
1671 * context sensitive empty text-code in all elements of the model
1672 * group that define their own text-code but that's really error
1673 * prone and difficult to maintain.
1675 HFsaveoutfile = outfile;
1678 outfile = HFsaveoutfile;
1680 <ELEMENT HELPVOLUME>
1683 language = LANGUAGE (QENGLISH = ENGLISH,
1684 QNORWEGIAN = NORWEGIAN,
1692 QSPANISH = SPANISH) ;
1698 mb_starthelpnode("_VERYTOP", TRUE);
1699 manustart(language, idxvol, status) ;
1709 mb_starthelpnode("_HISTORY", TRUE);
1712 <START-CODE * HEADER>
1713 if (newhline == MAXHEADLINES)
1714 m_error("Too many lines in header") ;
1715 fputs("<NEWLINE>\n", outfile);
1716 <START-CODE * FOOTER>
1717 if (newhline == MAXHEADLINES)
1718 m_error("Too many lines in footer") ;
1719 if (newhline++) fputs("<NEWLINE>\n", outfile) ;
1723 fputs("<NEWLINE>\n", outfile);
1726 <START-CODE CAPTION FIGURE>
1728 mb_shstring("<NEWLINE>\n",
1730 (sizeof(savehead) / sizeof(M_WCHAR)),
1732 "Too many characters in head or caption",
1734 <START-CODE CAPTION TABLE>
1736 <START-CODE HEAD CHAPHEAD>
1738 fputs(" ", stderr) ;
1739 fputs("<NEWLINE>", outfile) ;
1740 if (savid) shchar(' ',
1742 (sizeof(xrefstring) / sizeof(M_WCHAR)),
1745 "Too many characters in corresponding cross-reference",
1749 (sizeof(savehead) / sizeof(M_WCHAR)),
1752 "Too many characters in head or caption",
1757 fputs("<NEWLINE>", outfile) ;
1758 fputs("\\\n", docregfp) ;
1760 <START-CODE HEAD P, HEAD IMAGE, HEAD LIST, HEAD LABLIST, HEAD EX,
1762 if (newhline++) fputc(' ', outfile) ;
1763 <END-CODE HEAD CHAPHEAD,
1773 putc('\n', stderr) ;
1774 <END-CODE HEAD ABSTRACT>
1775 putc('\n', stderr) ;
1776 fputs("\\\n\\\n", docregfp) ;
1782 mb_starthelpnode("_HOMETOPIC", FALSE);
1783 nohometopic = FALSE;
1787 rule = RULE (QNORULE = NORULE,
1791 <ELEMENT HYPHENATIONS>
1801 range = RANGE (QBEGIN = BEGIN,
1810 /* ignore <idx end>'s in cache creek */
1811 if (!range || (range && m_wcmbupstrcmp(range, QEND)) )
1813 char *mb_print, *mb_nodeid;
1814 M_WCHAR *pwc, wnl, wsp;
1816 mbtowc(&wnl, "\n", 1);
1817 mbtowc(&wsp, " ", 1);
1820 while (pwc = w_strchr(pwc, wnl))
1822 mb_print = MakeMByteString(print);
1823 if (w_strlen(sort) > 0)
1828 while (pwc = w_strchr(pwc, wnl))
1830 mb_sort = MakeMByteString(sort);
1831 if (w_strlen(subsort) > 0 || w_strlen(subprint) > 0)
1833 /* append subsort or subprint */
1837 pwcSub = (w_strlen(subsort) > 0) ? subsort : subprint;
1839 while (pwc = w_strchr(pwc, wnl))
1841 mb_sub = MakeMByteString(pwcSub);
1842 fprintf(indexfp, "%s, %s", mb_sort, mb_sub);
1843 m_free(mb_sub,"multi-byte string");
1847 fprintf(indexfp, "%s", mb_sort);
1849 m_free(mb_sort,"multi-byte string");
1852 { /* use print field */
1853 if (w_strlen(subsort) > 0 || w_strlen(subprint) > 0)
1855 /* append subsort or subprint */
1859 pwcSub = (w_strlen(subsort) > 0) ? subsort : subprint;
1861 while (pwc = w_strchr(pwc, wnl))
1863 mb_sub = MakeMByteString(pwcSub);
1864 fprintf(indexfp, "%s, %s", mb_print, mb_sub);
1865 m_free(mb_sub,"multi-byte string");
1869 fprintf(indexfp, "%s", mb_print);
1872 putc('\036', indexfp);
1875 if (w_strlen(subprint) > 0)
1880 while (pwc = w_strchr(pwc, wnl))
1882 mb_subprint = MakeMByteString(subprint);
1883 fprintf(indexfp, "%s, %s", mb_print, mb_subprint);
1884 m_free(mb_subprint,"multi-byte string");
1888 fprintf(indexfp, "%s", mb_print);
1890 m_free(mb_print,"multi-byte string");
1891 putc('\036', indexfp);
1896 while (pwc = w_strchr(pwc, wnl))
1898 mb_nodeid = MakeMByteString(nodeid);
1899 fprintf(indexfp, "%s", mb_nodeid);
1900 m_free(mb_nodeid,"multi-byte string");
1901 putc('\036', indexfp);
1902 putc('\n', indexfp);
1905 indexchar(m_textchar) ;
1909 <ELEMENT IDX-CHAP-REF>
1919 <ELEMENT IDX-LETTER>
1921 <ELEMENT IDX-PRIMARY>
1923 <ELEMENT IDX-PRIMARY-AND-REF>
1933 <ELEMENT IDX-SUB-AND-REF>
1947 indexchar(m_textchar) ;
1954 gposition = GPOSITION (QLEFT = LEFT,
1956 ghyperlink = GHYPERLINK ;
1957 glinktype = GLINKTYPE (QJUMP = JUMP,
1958 QJUMPNEWVIEW = JUMPNEWVIEW,
1959 QDEFINITION = DEFINITION,
1961 QAPPDEFINED = APPDEFINED,
1963 gdescription = GDESCRIPTION ;
1965 <C variable> = NUMBER ;
1970 imagegentityp = gentity;
1971 imagegpositionp = gposition;
1972 imageghyperlinkp = ghyperlink;
1973 imageglinktypep = glinktype;
1974 imagegdescription = gdescription;
1979 m_free(imageId,"multi-byte string");
1980 imageId = MakeMByteString(id);
1981 mbstowcs(xrefstring, "\\<xref image>", 400);
1982 xstrlen = w_strlen(xrefstring) ;
1983 m_getline(&xrffile, &xrfline) ;
1984 if (xrffile == NULL) {
1985 /* set to primary input source */
1986 xrffile = inputname;
1998 char *mb_nodeid, *mb_id;
2000 mb_nodeid = MakeMByteString(nodeid);
2001 mb_id = MakeMByteString(id);
2002 fprintf(idtablefp, "%s> %s\n", mb_nodeid, mb_id);
2003 m_free(mb_nodeid,"multi-byte string");
2004 m_free(mb_id,"multi-byte string");
2008 exoutchar(m_textchar) ;
2014 fputs("<PARAGRAPH", outfile);
2016 fprintf(outfile, " id %s", imageId);
2017 m_free(imageId,"multi-byte string");
2022 " firstindent %d leftindent %d",
2026 fputs(" nowrap", outfile);
2028 wc_image = MakeWideCharString("IMAGE");
2029 handle_link_and_graphic(wc_image,
2035 m_free(wc_image,"wide character string");
2037 fputs(">", outfile);
2039 fputs("</PARAGRAPH>\n\n", outfile);
2045 <ELEMENT INDEXPRIMARY>
2050 /* capture saved term unless <sort> got it already */
2052 idxsav[idxsavlen] = M_EOS;
2053 w_strcpy(print, idxsav);
2056 else { /* save the sort field */
2057 idxsav[idxsavlen] = M_EOS;
2058 w_strcpy(sort, idxsav);
2066 /* capture saved term unless <sort> got it already */
2068 idxsav[idxsavlen] = M_EOS;
2069 w_strcpy(subprint, idxsav);
2071 else { /* save the sort field */
2072 idxsav[idxsavlen] = M_EOS;
2073 w_strcpy(subsort, idxsav);
2077 <ELEMENT INPUT.....>
2079 if (echo) mb_echohead("``") ;
2082 if (echo) mb_echohead("''") ;
2095 if (lastlist->lastlist->type == PLAIN) {
2096 leaderok = TRUE ; /* allow <LEADER> only in <LIST PLAIN> */
2102 fputs("</PARAGRAPH>\n\n", outfile);
2106 /* also does special handling for calculator--supers/subs */
2107 /*handles super and subs in keys */
2108 mb_strcode("[<TYPE sans_serif>", outfile) ;
2109 if (echo) mb_echohead("[[") ;
2111 mb_strcode("</TYPE>]", outfile) ;
2112 if (echo) mb_echohead("]]") ;
2114 esoutchar(m_textchar) ;
2116 <START-CODE * IDX, * IDXSYN>
2118 <END-CODE * IDX, * IDXSYN>
2120 <TEXT-CODE * IDX, * IDXSYN>
2121 indexchar(m_textchar) ;
2128 fputs("<PARAGRAPH", outfile);
2129 if (list <= MAXLISTLEV && lablistindented[list]) {
2130 fputs(" after 0", outfile);
2132 fputs(" leftindent 14><LABEL>", outfile);
2134 fputs("</LABEL>\n", outfile);
2138 fputs("<PARAGRAPH leftindent 14><LABEL><WEIGHT bold>", outfile);
2140 fputs("</WEIGHT></LABEL>\n", outfile);
2144 fputs("<PARAGRAPH><WEIGHT bold>", outfile);
2146 fputs("</WEIGHT></PARAGRAPH>\n", outfile);
2147 fputs("</PARAGRAPH>\n", outfile);
2153 longlabel = LONGLABEL (QWRAP = WRAP,
2156 spacing = SPACING (QTIGHT = TIGHT,
2161 mb_parent = MakeMByteString(m_parent(0));
2162 startlablist(longlabel, mb_checkdimen(width, "WIDTH", mb_parent), spacing) ;
2163 m_free(mb_parent,"multi-byte string");
2166 fputs("</PARAGRAPH>\n", outfile);
2170 type = TYPE (QSPACE = SPACE,
2175 if (! m_wcmbupstrcmp(type, QDOTS))
2178 else if (! m_wcmbupstrcmp(type, QSPACE))
2183 M_WCHAR *wc_stago, *wc_tagc;
2185 wc_stago = MakeWideCharString(m_stago);
2186 wc_tagc = MakeWideCharString(m_tagc);
2187 m_err2("Internal error: element %sLEADER%s in tex.if",
2190 m_free(wc_stago,"wide character string");
2191 m_free(wc_tagc,"wide character string");
2196 M_WCHAR *wc_stago, *wc_tagc;
2198 wc_stago = MakeWideCharString(m_stago);
2199 wc_tagc = MakeWideCharString(m_tagc);
2200 m_err4("%sLEADER%s only allowed in %sLIST PLAIN%s",
2205 m_free(wc_stago,"wide character string");
2206 m_free(wc_tagc,"wide character string");
2214 mb_starthelpnode("_LEGAL", TRUE);
2220 char mb_xrefstring[400];
2224 "Preparing cross-reference to a line in an example without line numbers"
2226 sprintf(mb_xrefstring, "%d", exlineno) ;
2227 mbstowcs(xrefstring, mb_xrefstring, 400);
2228 xstrlen = w_strlen(xrefstring) ;
2229 m_getline(&xrffile, &xrfline) ;
2230 if (xrffile == NULL) {
2231 /* set to primary input */
2232 xrffile = inputname;
2245 mb_id = MakeMByteString(id);
2246 fprintf(outfile, "<ID \"%s\"></ID>", mb_id);
2247 m_free(mb_id,"multi-byte string");
2252 hyperlink = HYPERLINK ;
2253 type = TYPE (QJUMP = JUMP,
2254 QJUMPNEWVIEW = JUMPNEWVIEW,
2255 QDEFINITION = DEFINITION,
2257 QAPPDEFINED = APPDEFINED,
2259 description = DESCRIPTION ;
2261 fputs("<LINK ", outfile);
2262 if (!type) { /* default to type jump */
2263 fputs("0 ", outfile);
2265 else { /* type is set, choose which is correct */
2266 if (!m_wcmbupstrcmp(type, QJUMP))
2267 { fputs("0 ", outfile); global_linktype = 0;}
2268 else if (!m_wcmbupstrcmp(type, QJUMPNEWVIEW))
2269 { fputs("1 ", outfile); global_linktype = 1;}
2270 else if (!m_wcmbupstrcmp(type, QDEFINITION))
2271 { fputs("2 ", outfile); global_linktype = 2;}
2272 else if (!m_wcmbupstrcmp(type, QEXECUTE))
2273 { fputs("3 ", outfile); global_linktype = 3;}
2274 else if (!m_wcmbupstrcmp(type, QMAN))
2275 { fputs("4 ", outfile); global_linktype = 4;}
2276 else if (!m_wcmbupstrcmp(type, QAPPDEFINED))
2277 { fputs("5 ", outfile); global_linktype = 5;}
2278 else { /* parser won't let this case happen */
2279 M_WCHAR *wc_stago, *wc_tagc;
2281 wc_stago = MakeWideCharString(m_stago);
2282 wc_tagc = MakeWideCharString(m_tagc);
2283 m_err3("%sLINK%s (type=``%s'') did not match an allowed value",
2287 m_free(wc_stago,"wide character string");
2288 m_free(wc_tagc,"wide character string");
2294 mb_hyperlink = MakeMByteString(hyperlink);
2295 fprintf(outfile, "\"%s\"", mb_hyperlink);
2296 m_free(mb_hyperlink,"multi-byte string");
2301 "Error: %sLINK%s hyperlink was undefined.\n",
2305 "Error: %sLINK%s hyperlink was undefined.\n",
2309 "Beware of using a reserved value such as:\n%s, %s, %s, %s, %s, or %s.\n",
2317 "Beware of using a reserved value such as:\n%s, %s, %s, %s, %s, or %s.\n",
2324 m_errline("Use ``hyperlink='' if the value contains non-alphabetics");
2326 fputs("_undefined", outfile);
2329 char *mb_description;
2331 mb_description = MakeMByteString(description);
2332 fprintf(outfile, " \"%s\"", mb_description);
2333 m_free(mb_description,"multi-byte string");
2335 fputs(">", outfile);
2337 /* reset link type to default. This is braindead, but enough.
2341 <link foo DEFINITION><XREF bar><\link>
2343 will do the right thing (remember that xref turns to an implicit link).
2344 Right_thing => xref becomes definition link.
2348 <link foo DEFINITION> <link fub> Test <\link> <xref bar> <\link>
2350 the xref will think that is supposed to become a link of type jump,
2351 not definition. This case is odd, so we won't worry about it.
2353 global_linktype = 0;
2354 fputs("</LINK>", outfile);
2358 type = TYPE (QORDER = ORDER,
2363 order = ORDERTYPE (QUALPHA = UALPHA,
2368 spacing = SPACING (QTIGHT = TIGHT,
2372 startlist(type, order, spacing, cont) ;
2375 CONTCHAIN *chain, *xchain ;
2377 curlist = lastlist->lastlist ;
2378 for (chain = lastlist->chain ; chain ; chain = xchain) {
2379 xchain = chain->next ;
2380 m_free(chain, "list chain") ;
2382 m_free(lastlist, "list structure") ;
2383 lastlist = curlist ;
2384 for (chain = lastlist->chain ; chain ; chain = chain->next) {
2385 fseek(outfile, chain->where, SEEK_SET) ;
2386 if (lastlist->count > 999) {
2387 m_error("Unable to support more than 999 items in an ordered list") ;
2388 lastlist->count = 999 ;
2390 fseek(outfile, 0L, SEEK_END) ;
2392 if (lastlist->type == BULLET) bulcount-- ;
2394 fputs("</PARAGRAPH>\n\n", outfile);
2401 char mb_xrefstring[400];
2403 sprintf(mb_xrefstring, "\\<xref location>") ;
2404 mbstowcs(xrefstring, mb_xrefstring, 400);
2405 xstrlen = w_strlen(xrefstring) ;
2406 m_getline(&xrffile, &xrfline) ;
2407 if (xrffile == NULL) {
2408 /* set to primary input source */
2409 xrffile = inputname;
2421 char *mb_nodeid, *mb_id;
2423 mb_nodeid = MakeMByteString(nodeid);
2424 mb_id = MakeMByteString(id);
2425 fprintf(idtablefp, "%s> %s\n", mb_nodeid, mb_id);
2426 fprintf(outfile, "<ID \"%s\">", mb_id);
2427 m_free(mb_nodeid,"multi-byte string");
2428 m_free(mb_id,"multi-byte string");
2432 fprintf(outfile, "</ID>");
2437 language = LANGUAGE (QENGLISH = ENGLISH,
2438 QNORWEGIAN = NORWEGIAN,
2446 QSPANISH = SPANISH) ;
2451 mb_starthelpnode("_VERYTOP", TRUE);
2452 manustart(language, idxvol, status) ;
2461 mb_starthelpnode("_MAP", TRUE);
2467 if (memo && !final) {
2468 if (! m_wcmbupstrcmp(m_parent(1), "TEXT"))
2469 fputs("<WEIGHT bold>", outfile) ;
2472 if (memo && !final) {
2474 fputs("</WEIGHT>", outfile) ;
2478 if (m_textchar == '"') { /* handle funny quote in memo bug */
2481 outchar(m_textchar, outfile);
2485 /* could need to handle calculator context sensitive entities
2486 * here if needed to reduce tex macro count
2489 outpi(m_enttype, m_pi, m_entname) ;
2497 open_new_helpfile();
2499 mb_starthelpnode("_MESSAGE", FALSE);
2501 fprintf(stderr, "\nMessages.\n") ;
2502 emsghead = DEFHEAD ;
2511 GetDefaultHeaderString("MfgNumberElementDefaultHeadingString",
2513 "Manufacturing Number");
2515 mb_starthelpnode("_MFGNO", TRUE);
2516 fprintf(outfile, "<TITLE><TYPE serif><WEIGHT bold><SIZE 14>%s</SIZE></WEIGHT></TYPE></TITLE>\n\n", string);
2517 fputs("<PARAGRAPH>", outfile);
2518 m_free(string, "default header string return");
2520 fputs("</PARAGRAPH>\n\n", outfile);
2531 fprintf(outfile, "<PARAGRAPH leftindent 5>\n");
2533 fprintf(outfile, "</PARAGRAPH>\n");
2537 fprintf(outfile, "\\ \\ ");
2546 savid = checkid(NULL) ; /* hook for possible future ID */
2552 fprintf(outfile, "<WEIGHT bold>");
2554 fprintf(outfile, "</WEIGHT>\n");
2558 type = TYPE (QBEGIN = BEGIN,
2560 QTOGETHER = TOGETHER) ;
2565 fputs("<NEWLINE>", outfile) ;
2566 <START-CODE * ABSTRACT>
2567 fputs("<NEWLINE>", outfile) ;
2568 fputs("\\\n", docregfp) ;
2572 <START-CODE * RSECT>
2574 rsectholdnew = TRUE ;
2579 mb_echohead(m_stago) ;
2580 echohead(m_parent(0)) ;
2581 mb_echohead(m_net) ;
2584 if (echo) mb_echohead(m_net) ;
2586 <START-CODE * IDX, * IDXSYN>
2587 <END-CODE * IDX, * IDXSYN>
2588 <TEXT-CODE * IDX, * IDXSYN>
2589 indexchar(m_textchar) ;
2591 <TEXT-CODE * EXAMPLESEG, * IMAGE>
2592 outchar(m_textchar, outfile) ;
2597 mb_echohead(m_stago) ;
2598 echohead(m_parent(0)) ;
2599 mb_echohead(m_net) ;
2602 if (echo) mb_echohead(m_net) ;
2604 <START-CODE * IDX, * IDXSYN>
2605 <END-CODE * IDX, * IDXSYN>
2606 <TEXT-CODE * IDX, * IDXSYN>
2607 indexchar(m_textchar) ;
2609 <TEXT-CODE * EXAMPLESEG, * IMAGE>
2610 outchar(m_textchar, outfile) ;
2613 <START-CODE TEXT ITEM>
2615 /* In a tight list, paragraphs will have no trailing blank line.
2616 * To match HPTag behavior, we need to emit a blank line and
2617 * supress the leading blank line of the next paragraph, figure,
2618 * example, etc., if any.
2621 if ((lastlist->lastlist->space == TIGHT) &&
2622 (lastlist->lastlist->where == INSIDE)) {
2623 ncwTightList = " before 1";
2633 <END-CODE TEXT ITEM>
2634 fputs("</PARAGRAPH>\n\n", outfile);
2635 lastlist->lastlist->where = FOLLOW; /* supress leading newline */
2637 fputs("</PARAGRAPH>\n\n", outfile);
2640 <START-CODE * IDX, * IDXSYN>
2641 <END-CODE * IDX, * IDXSYN>
2642 <TEXT-CODE * IDX, * IDXSYN>
2643 indexchar(m_textchar) ;
2645 <TEXT-CODE * EXAMPLESEG, * IMAGE>
2646 outchar(m_textchar, outfile) ;
2651 fputs("[", outfile);
2653 fputs("]", outfile);
2656 <ELEMENT OTHERFRONT>
2663 m_error("Warning: <OTHERFRONT> topic will not be reachable because it has no ID");
2666 starthelpnode(id, TRUE);
2667 had_an_otherfront_head = FALSE;
2668 savid = checkid(id) ;
2671 if (id && !had_an_otherfront_head) {
2672 m_errline("You must use a <HEAD> tag after <OTHERFRONT>\n");
2677 <ELEMENT OUTPUT....>
2679 if (echo) mb_echohead("``") ;
2682 if (echo) mb_echohead("''") ;
2696 gposition = GPOSITION (QLEFT = LEFT,
2698 ghyperlink = GHYPERLINK ;
2699 glinktype = GLINKTYPE (QJUMP = JUMP,
2700 QJUMPNEWVIEW = JUMPNEWVIEW,
2701 QDEFINITION = DEFINITION,
2703 QAPPDEFINED = APPDEFINED,
2705 gdescription = GDESCRIPTION ;
2706 <START-CODE TEXT ITEM>
2710 if (lastlist->lastlist->space == TIGHT) {
2711 if (lastlist->lastlist->where == INSIDE)
2712 listinfo = " before 1 after 0";
2713 else if (lastlist->lastlist->where == FOLLOW)
2714 listinfo = " after 0";
2716 lastlist->lastlist->where = INSIDE;
2736 fputs("</PARAGRAPH>\n\n", outfile);
2743 mb_echohead(m_stago) ;
2744 echohead(m_parent(0)) ;
2745 mb_echohead(m_net) ; /* '|' */
2748 if (echo) mb_echohead(m_net) ; /* '|' */
2750 <START-CODE * IDX, * IDXSYN>
2751 /* We perhaps should allow <parm> to be used in <idx>.
2752 Since we are now dependent on LaserROM, we just can't
2753 add it in (as an inclusion exception to idx).
2754 So, we take out the code that would inplement it and
2755 give an error message. */
2757 M_WCHAR *wc_stago, *wc_tagc;
2759 wc_stago = MakeWideCharString(m_stago);
2760 wc_tagc = MakeWideCharString(m_tagc);
2761 m_err4("%sPARM%s not allowed in %sIDX%s.",
2766 m_free(wc_stago,"wide character string");
2767 m_free(wc_tagc,"wide character string");
2768 <END-CODE * IDX, * IDXSYN>
2769 <TEXT-CODE * IDX, * IDXSYN>
2770 indexchar(m_textchar) ;
2771 <START-CODE * CHAPHEAD>
2772 M_WCHAR *wc_stago, *wc_tagc;
2774 wc_stago = MakeWideCharString(m_stago);
2775 wc_tagc = MakeWideCharString(m_tagc);
2776 m_err2("%sPARM%s not allowed in headings.", wc_stago, wc_tagc);
2777 m_free(wc_stago,"wide character string");
2778 m_free(wc_tagc,"wide character string");
2779 <END-CODE * CHAPHEAD>
2781 <END-CODE * EXAMPLESEG, * IMAGE>
2792 GetDefaultHeaderString("PartElementDefaultHeadingString",
2796 unimp(m_parent(0)) ;
2797 outfile = m_outfile; /* we want part not to trigger nullfile */
2798 m_free(string, "default header string return");
2807 GetDefaultHeaderString("PartNumberElementDefaultHeadingString",
2811 mb_starthelpnode("_PARTNO", TRUE);
2812 fprintf(outfile, "<TITLE><TYPE serif><WEIGHT bold><SIZE 14>%s</SIZE></WEIGHT></TYPE></TITLE>\n\n", string);
2813 fputs("<PARAGRAPH>", outfile);
2814 m_free(string, "default header string return");
2816 fputs("</PARAGRAPH>\n\n", outfile);
2823 mb_starthelpnode("_PREFACE", TRUE);
2829 GetDefaultHeaderString("DatePrintedElementDefaultHeadingString",
2833 mb_starthelpnode("_PRINTDATE", TRUE);
2834 fprintf(outfile, "<TITLE><TYPE serif><WEIGHT bold><SIZE 14>%s</SIZE></WEIGHT></TYPE></TITLE>\n\n", string);
2835 fputs("<PARAGRAPH>", outfile);
2836 m_free(string, "default header string return");
2838 fputs("</PARAGRAPH>\n\n", outfile);
2845 GetDefaultHeaderString("ProductElementDefaultHeadingString",
2849 mb_starthelpnode("_PRODUCT", TRUE);
2850 fprintf(outfile, "<TITLE><TYPE serif><WEIGHT bold><SIZE 14>%s</SIZE></WEIGHT></TYPE></TITLE>\n\n", string);
2851 fputs("<PARAGRAPH>", outfile);
2852 m_free(string, "default header string return");
2854 fputs("</PARAGRAPH>\n\n", outfile);
2859 <START-CODE * COMPUTER>
2860 mb_strcode("\\\"", outfile) ;
2861 if (echo) putc('"', stderr) ;
2862 <END-CODE * COMPUTER>
2863 mb_strcode("\\\"", outfile) ;
2864 if (echo) putc('"', stderr) ;
2867 mb_strcode("``", outfile) ;
2868 if (echo) putc('"', stderr) ;
2870 mb_strcode("''", outfile) ;
2871 if (echo) putc('"', stderr) ;
2873 <START-CODE * IDX, * IDXSYN>
2875 <END-CODE * IDX, * IDXSYN>
2877 <TEXT-CODE * IDX, * IDXSYN>
2878 indexchar(m_textchar) ;
2880 <ELEMENT REFERENCES>
2885 GetDefaultHeaderString("ReplacesElementDefaultHeadingString",
2889 mb_starthelpnode("_REPLACES", TRUE);
2890 fprintf(outfile, "<TITLE><TYPE serif><WEIGHT bold><SIZE 14>%s</SIZE></WEIGHT></TYPE></TITLE>\n\n", string);
2891 fputs("<PARAGRAPH>", outfile);
2892 m_free(string, "default header string return");
2894 fputs("</PARAGRAPH>\n\n", outfile);
2899 fputs("{", outfile);
2901 fputs("}", outfile);
2905 delim = DELIM (QBEGIN = BEGIN,
2926 pagebreak = PAGEBREAK (QNEWPAGE = NEWPAGE,
2927 QSAMEPAGE = SAMEPAGE) ;
2931 assert_hometopic_exists();
2932 if (!rsectseq) thisnodelevel = lastnodelevel + 1;
2933 starthelpnode(id, FALSE);
2934 rsectstart(id, pagebreak) ;
2948 if (rsectsame) st4 = TRUE ;
2951 if (st4) st4 = FALSE ;
2959 assert_hometopic_exists();
2961 starthelpnode(id, FALSE);
2964 savid = checkid(id) ;
2977 starthelpnode(id, FALSE);
2979 savid = checkid(id) ;
2992 starthelpnode(id, FALSE);
2994 savid = checkid(id) ;
2996 <START-CODE * CSPOT>
2998 starthelpnode(id, FALSE);
3000 savid = checkid(id) ;
3013 starthelpnode(id, FALSE);
3014 savid = checkid(id) ;
3017 <START-CODE * CSPOT>
3019 starthelpnode(id, FALSE);
3020 savid = checkid(id) ;
3024 if (st4) st4 = FALSE ;
3034 starthelpnode(id, FALSE);
3036 savid = checkid(id) ;
3049 starthelpnode(id, FALSE);
3051 savid = checkid(id) ;
3064 starthelpnode(id, FALSE);
3066 savid = checkid(id) ;
3079 starthelpnode(id, FALSE);
3081 savid = checkid(id) ;
3094 starthelpnode(id, FALSE);
3096 savid = checkid(id) ;
3107 mb_starthelpnode("_SAFETY", TRUE);
3113 GetDefaultHeaderString("SDCElementDefaultHeadingString",
3117 mb_starthelpnode("_SDC", TRUE);
3118 fprintf(outfile, "<TITLE><TYPE serif><WEIGHT bold><SIZE 14>%s</SIZE></WEIGHT></TYPE></TITLE>\n\n", string);
3119 fputs("<PARAGRAPH>", outfile);
3120 m_free(string, "default header string return");
3122 fputs("</PARAGRAPH>\n\n", outfile);
3124 <ELEMENT SEEFROMPRIMARY>
3130 <ELEMENT SEEFROMSUB>
3136 <ELEMENT SEETOPRIMARY>
3151 GetDefaultHeaderString("SerialNumberElementDefaultHeadingString",
3155 mb_starthelpnode("_SERIALNO", TRUE);
3156 fprintf(outfile, "<TITLE><TYPE serif><WEIGHT bold><SIZE 14>%s</SIZE></WEIGHT></TYPE></TITLE>\n\n", string);
3157 m_free(string, "default header string return");
3161 <START-CODE * IDX, * IDXSYN>
3162 if (newhline++) indexchar(' ');
3163 <TEXT-CODE * IDX, * IDXSYN>
3164 indexchar(m_textchar) ;
3169 <START-CODE * IDX, * IDXSYN>
3171 <END-CODE * IDX, * IDXSYN>
3172 <TEXT-CODE * IDX, * IDXSYN>
3173 indexchar(m_textchar) ;
3178 if (echo) mb_echohead("{{") ;
3180 if (echo) mb_echohead("}}") ;
3182 esoutchar(m_textchar) ;
3186 <START-CODE INDEXPRIMARY>
3188 idxsav[idxsavlen] = M_EOS;
3189 w_strcpy(print, idxsav);
3191 <END-CODE INDEXPRIMARY>
3192 idxsav[idxsavlen] = M_EOS;
3193 w_strcpy(sort, idxsav);
3194 <START-CODE INDEXSUB>
3196 idxsav[idxsavlen] = M_EOS;
3197 w_strcpy(subprint, idxsav);
3200 idxsav[idxsavlen] = M_EOS;
3201 w_strcpy(subsort, idxsav);
3208 GetDefaultHeaderString("SourceElementDefaultHeadingString",
3212 mb_starthelpnode("_SOURCE", TRUE);
3213 fprintf(outfile, "<TITLE><TYPE serif><WEIGHT bold><SIZE 14>%s</SIZE></WEIGHT></TYPE></TITLE>\n\n", string);
3214 fputs("<PARAGRAPH>", outfile);
3215 m_free(string, "default header string return");
3217 fputs("</PARAGRAPH>\n\n", outfile);
3221 if (echo) mb_echohead("__") ;
3223 if (echo) mb_echohead("__") ;
3224 <START-CODE * COMPUTER, * SOFTKEY, * WHITEMENU>
3225 if (echo) mb_echohead("__") ;
3226 <END-CODE * COMPUTER, * SOFTKEY, * WHITEMENU>
3227 if (echo) mb_echohead("__") ;
3228 <START-CODE * CCELL>
3229 if (echo) mb_echohead("__") ;
3231 if (echo) mb_echohead("__") ;
3233 <START-CODE * IDX, * IDXSYN>
3234 <END-CODE * IDX, * IDXSYN>
3235 <TEXT-CODE * IDX, * IDXSYN>
3236 indexchar(m_textchar) ;
3238 <TEXT-CODE * COMPUTER, * SOFTKEY, * WHITEMENU>
3239 outchar(m_textchar, outfile) ;
3241 <TEXT-CODE * EXAMPLESEG, * IMAGE>
3242 outchar(m_textchar, outfile) ;
3244 <ELEMENT SUBCATEGORY>
3250 if (echo) mb_echohead("^^") ;
3252 if (echo) mb_echohead("^^") ;
3253 <TEXT-CODE * COMPUTER, * SOFTKEY, * WHITEMENU>
3254 outchar(m_textchar, outfile) ;
3255 <START-CODE * IDX, * IDXSYN>
3256 <END-CODE * IDX, * IDXSYN>
3257 <TEXT-CODE * IDX, * IDXSYN>
3258 indexchar(m_textchar) ;
3260 <TEXT-CODE * EXAMPLESEG, * IMAGE>
3261 outchar(m_textchar, outfile) ;
3264 <START-CODE OPTBLOCK, REQBLOCK>
3266 fputs("\n", outfile);
3268 <END-CODE OPTBLOCK, REQBLOCK>
3270 fputs("\n", outfile);
3272 if (m_textchar == M_SPACE) fputs("\\ ", outfile) ;
3273 else outchar(m_textchar, outfile) ;
3278 <START-CODE TEXT ITEM>
3279 /* In a tight list, paragraphs will have no trailing blank line.
3280 * To match HPTag behavior, we need to emit a blank line and
3281 * supress the leading blank line of the next paragraph, figure,
3282 * example, etc., if any.
3288 if ((lastlist->lastlist->space == TIGHT) &&
3289 (lastlist->lastlist->where == INSIDE)) {
3290 listinfo = " before 1";
3294 "<PARAGRAPH%s firstindent %d leftindent %d nowrap><TYPE serif><SPACING m>",
3301 fprintf(outfile, "<PARAGRAPH firstindent %d leftindent %d nowrap><TYPE serif><SPACING m>", LEFTINDENT, LEFTINDENT);
3302 <END-CODE TEXT ITEM>
3303 fputs("</SPACING></TYPE></PARAGRAPH>\n\n", outfile);
3304 lastlist->lastlist->where = FOLLOW; /* supress leading newline */
3306 fputs("</SPACING></TYPE></PARAGRAPH>\n\n", outfile);
3308 if (m_textchar == M_SPACE) fputs("\\ ", outfile) ;
3309 else outchar(m_textchar, outfile) ;
3316 tonumber = TONUMBER (QNUMBER = NUMBER,
3317 QNONUMBER = NONUMBER) ;
3318 box = BOX (QBOX = BOX,
3320 rule = RULE (QNORULE = NORULE,
3321 QHEADRULE = HEADRULE,
3327 spacing = SPACING (QTIGHT = TIGHT,
3329 width = WIDTH (QFULL = FULL) ;
3330 position = POSITION (QLEFT = LEFT,
3334 textsize = TEXTSIZE (QNORMAL = NORMAL,
3336 QSMALLEST = SMALLEST) ;
3338 fputs("<PARAGRAPH>", outfile);
3339 unimp(m_parent(0)) ;
3341 fputs("</PARAGRAPH>\n", outfile);
3348 gloss = GLOSS (QGLOSS = GLOSS,
3349 QNOGLOSS = NOGLOSS) ;
3354 if (echo) mb_echohead("++") ;
3355 <END-CODE * GLOSSARY>
3356 endterm(base, gloss, 0); /* 0 => don't use definition window for link */
3358 endterm(base, gloss, 2); /* 2 => use definition window for link */
3360 termchar(m_textchar) ;
3362 /* could need to handle calculator context sensitive entities
3363 * here if needed to reduce tex macro count
3365 termpi(m_enttype, m_pi, m_entname) ;
3374 starthelpnode(id, FALSE);
3377 savid = checkid(id) ;
3386 GetDefaultHeaderString("NoteElementDefaultIconFile", M_SYSTEM, "");
3388 GetDefaultHeaderString("NoteElementDefaultHeadingString",
3393 /* Write default note head if no user-specified head was encountered */
3395 fprintf(outfile, ncwStart, ncwTightList);
3396 fprintf(outfile, ncwEnd, string);
3399 fprintf(outfile, ncwGraphic, iconName);
3400 m_free(iconName, "icon name");
3404 m_free(string, "default header string return");
3405 <START-CODE CAUTION>
3407 GetDefaultHeaderString("CautionElementDefaultIconFile", M_SYSTEM, "");
3409 GetDefaultHeaderString("CautionElementDefaultHeadingString",
3414 /* Write default caution head if no user-specified head was encountered */
3416 fprintf(outfile, ncwStart, ncwTightList);
3417 fprintf(outfile, ncwEnd, string);
3420 fprintf(outfile, ncwGraphic, iconName);
3421 m_free(iconName, "icon name");
3425 m_free(string, "default header string return");
3426 <START-CODE WARNING>
3428 GetDefaultHeaderString("WarningElementDefaultIconFile", M_SYSTEM, "");
3430 GetDefaultHeaderString("WarningElementDefaultHeadingString",
3434 /* Write default warning head if no user-specified head was encountered */
3436 fprintf(outfile, ncwStart, ncwTightList);
3437 fprintf(outfile, ncwEnd, string);
3440 fprintf(outfile, ncwGraphic, iconName);
3441 m_free(iconName, "icon name");
3445 m_free(string, "default header string return");
3446 <START-CODE OTHERFRONT>
3447 if (!had_an_otherfront_head) {
3450 <START-CODE MESSAGE>
3452 <START-CODE ABSTRACT>
3453 if (needabstracthead)
3455 fprintf(outfile, "<TITLE></TITLE>\n");
3456 needabstracthead = FALSE;
3459 fputs("</PARAGRAPH>\n", outfile);
3464 GetDefaultHeaderString("TitleElementDefaultHeadingString",
3469 mb_starthelpnode("_TITLE", TRUE);
3470 fprintf(outfile, "<TITLE><TYPE serif><WEIGHT bold><SIZE 14>%s</SIZE></WEIGHT></TYPE></TITLE>\n\n", string);
3476 fputs("<PARAGRAPH>", outfile);
3477 m_free(string, "default header string return");
3479 fputs("</PARAGRAPH>\n\n", outfile);
3480 savehead[svheadlen] = M_EOS ;
3483 m_error("Error collecting title characters.");
3489 mb_savehead = MakeMByteString(savehead);
3490 fprintf(docregfp, "*title:\t%s\n", mb_savehead);
3491 m_free(mb_savehead,"multi-byte string");
3494 savedtitle = (M_WCHAR *) m_malloc(w_strlen(savehead) + 1, "saved title");
3495 w_strcpy(savedtitle, savehead);
3512 mb_echohead(m_stago) ;
3513 echohead(m_parent(0)) ;
3514 mb_echohead(m_net) ;
3516 mb_strcode("<SPACING m><WEIGHT bold>", outfile);
3518 esoutchar(m_textchar) ;
3520 if (echo) mb_echohead(m_net) ;
3521 mb_strcode("</WEIGHT></SPACING>", outfile);
3522 <TEXT-CODE * EXAMPLESEG>
3523 exoutchar(m_textchar) ;
3525 <START-CODE * IDX, * IDXSYN>
3526 <END-CODE * IDX, * IDXSYN>
3527 <TEXT-CODE * IDX, * IDXSYN>
3528 indexchar(m_textchar) ;
3532 mb_strcode("<TYPE serif><ANGLE italic><SPACING p>", outfile) ;
3533 if (echo) mb_echohead("%%") ;
3535 mb_strcode("</SPACING></ANGLE></TYPE>", outfile) ;
3536 if (echo) mb_echohead("%%") ;
3538 <START-CODE * IDX, * IDXSYN>
3539 <END-CODE * IDX, * IDXSYN>
3540 <TEXT-CODE * IDX, * IDXSYN>
3541 indexchar(m_textchar) ;
3543 <END-CODE * EXAMPLESEG, * IMAGE, * SYNEL>
3545 mb_strcode("</SPACING></ANGLE></TYPE>", outfile) ;
3547 /* added to fix calculator computer chars */
3549 if (m_textchar == M_SPACE) fputs("\\ ", outfile) ;
3550 else outchar(m_textchar, outfile) ;
3555 GetDefaultHeaderString("VersionElementDefaultHeadingString",
3559 mb_starthelpnode("_VERSION", TRUE);
3560 fprintf(outfile, "<TITLE><TYPE serif><WEIGHT bold><SIZE 14>%s</SIZE></WEIGHT></TYPE></TITLE>\n\n", string);
3561 fputs("<PARAGRAPH>", outfile);
3562 m_free(string, "default header string return");
3564 fputs("</PARAGRAPH>\n\n", outfile);
3568 type = TYPE (QCOMPUTER = COMPUTER,
3569 QDISPLAY = DISPLAY) ;
3570 position = POSITION (QLEFT = LEFT,
3573 lines = LINES (QNUMBER = NUMBER,
3574 QNONUMBER = NONUMBER) ;
3575 textsize = TEXTSIZE (QNORMAL = NORMAL,
3577 QSMALLEST = SMALLEST) ;
3578 <START-CODE TEXT ITEM>
3579 /* In a tight list, paragraphs will have no trailing blank line.
3580 * To match HPTag behavior, we need to emit a blank line and
3581 * supress the leading blank line of the next paragraph, figure,
3582 * example, etc., if any.
3587 if ((lastlist->lastlist->space == TIGHT) &&
3588 (lastlist->lastlist->where == INSIDE)) {
3589 listinfo = " before 1";
3592 exvexstart(type, textsize, listinfo) ;
3593 tonumexlines = (LOGICAL) (vnumber(lines) == NUMBER);
3595 if (tonumexlines) fprintf(outfile, " %d. ", exlineno) ;
3597 exvexstart(type, textsize, "") ;
3598 tonumexlines = (LOGICAL) (vnumber(lines) == NUMBER);
3600 if (tonumexlines) fprintf(outfile, " %d. ", exlineno) ;
3601 <END-CODE TEXT ITEM>
3603 lastlist->lastlist->where = FOLLOW; /* supress leading newline */
3607 exoutchar(m_textchar) ;
3612 GetDefaultHeaderString("VolumeElementDefaultHeadingString",
3616 mb_starthelpnode("_VOLUME", TRUE);
3617 fprintf(outfile, "<TITLE><TYPE serif><WEIGHT bold><SIZE 14>%s</SIZE></WEIGHT></TYPE></TITLE>\n\n", string);
3618 fputs("<PARAGRAPH>", outfile);
3619 m_free(string, "default header string return");
3621 fputs("</PARAGRAPH>\n\n", outfile);
3624 <START-CODE TEXT ITEM>
3626 /* In a tight list, paragraphs will have no trailing blank line.
3627 * To match HPTag behavior, we need to emit a blank line and
3628 * supress the leading blank line of the next paragraph, figure,
3629 * example, etc., if any.
3632 if ((lastlist->lastlist->space == TIGHT) &&
3633 (lastlist->lastlist->where == INSIDE)) {
3634 ncwTightList = " before 1";
3644 <END-CODE TEXT ITEM>
3645 fputs("</PARAGRAPH>\n\n", outfile);
3646 lastlist->lastlist->where = FOLLOW; /* supress leading newline */
3648 fputs("</PARAGRAPH>\n\n", outfile);
3652 original = ORIGINAL ;
3654 --m_errcnt ; /* this is a message, not really an error */
3656 m_err1("Convert %s WHATSIT to Tag markup", original) ;
3658 m_error("Convert WHATSIT to Tag markup") ;
3661 <START-CODE * IDX, * IDXSYN>
3663 <TEXT-CODE * IDX, * IDXSYN>
3664 indexchar(m_textchar) ;
3668 /* Cross-referencing that allows forward references is inherently a two-pass
3669 process. However, this interface assumes a two-pass process. MARKUP
3670 provides the first pass and TeX the second. MARKUP can therefore define
3671 a TeX macro for every cross-reference and write a file of definitions of
3672 these macros that is read at the beginning of the TeX pass. In fact,
3673 information about cross-references is stored in a trie by MARKUP. Data is
3674 entered into this structure both when a cross-reference is defined (with
3675 an id parameter on a chapter, figure, etc.) and when it is used (with the
3676 xref element). At the end of the manual, the file xref.tex is written
3677 with definitions of macros corresponding to all cross-references defined
3678 or accessed. In addition, the file xreftbl is written to save this
3679 information in a form that can be read to initialize the trie the next
3680 time the manual is processed. Saving cross-reference information across
3681 runs of MARKUP allows a manual to be processed a chapter at a time without
3682 invalidating interchapter references. The file xreftbl should be
3683 deleted before final processing, however, to verify that no cross-references
3684 remain to an id that existed at one time and was deleted. Such an id could
3685 remain in the cross-reference table indefinitely.
3689 <START-CODE * IDX, * IDXSYN>
3690 <TEXT-CODE * IDX, * IDXSYN>
3691 indexchar(m_textchar) ;