1 /* 2 * Copyright (C) 1991,1992,1993 NEC Corporation. 3 * $Id: plain2.h,v 2.21 1994/04/19 10:16:57 uchida Exp $ (NEC) 4 */ 5 /* 6 * plain2 -- plain tex to {roff, LaTeX} translator 7 * 8 * Author: uchida@ccs.mt.nec.co.jp (Uchida, Akihiro) 9 * 10 * Organization: C&C Common Software Development Lab. 11 * NEC Corporation 12 * 13 * thanks to: sano@ccs.mt.nec.co.jp (Sano, Susumu) 14 * saji@ccs.mt.nec.co.jp (Saji, Nobuyuki) 15 * 0.0: 18/12/89 16 * 1.0: 17/08/90 17 * 2.0: 12/12/90 18 * 2.2: 31/05/91 19 * 2.4: 28/04/92 20 * 2.5: 06/08/93 21 */ 22 /* 23 * modify by k-chinen@is.aist-nara.ac.jp, 1994 24 */ 25 26 /* #define NEC_CCS /* NEC C&C Common Software Lab. dependent */ 27 28 /* #undef NTT_TEX /* NTT jlatex */ /* no longer needed */ 29 30 #define TITLE_SPECIAL 31 32 #define PLAIN2_ENV "PLAIN2_INIT" 33 #define PLAIN2_LIB "PLAIN2_LIB" 34 35 #define MACRO_LIB "/usr/local/share/plain2" 36 37 #define DEFAULT_STY "" /* default style in TeX output */ 38 /*#define DEFAULT_STY "a4" */ 39 40 #define MIN_INDENT 4 /* minimum indentation to be indented region */ 41 #define MIN_SPACING 4 /* minimum number of lines to be space region*/ 42 #define MAX_DSCRLEN 40 /* maximum length for description list */ 43 44 #define DEF_PAGE_WIDTH 820 /* default page width in pt. (A4 size) */ 45 #define MAX_LINE_LEN 1024 /* length of input buffer */ 46 #define ESC 0x1b /* Escape character */ 47 /* 48 * Text Line structure 49 */ 50 struct text { 51 struct textBlock *block; 52 char *body; /* Pointer to saved text line */ 53 /* outlooks of the line */ 54 short blank; /* Blank line */ 55 short length; /* Text Length (including leading white)*/ 56 short indent; /* Text Indentation */ 57 short spaces; /* Number of space */ 58 short japanese; /* If Japanese character included */ 59 short picLines; /* Number of picture line */ 60 /* result of line analysis */ 61 #define DEFINITELY 2 62 #define AMBIGUOUS 1 63 #define NEVER 0 64 short pListHead; /* looks like list head */ 65 short pSecNum; /* looks like section number */ 66 #define FT_FIGURE 1 67 #define FT_TABLE 2 68 short fTitle; 69 #define L_NUMBER 1 /* Number list head */ 70 #define L_SROMAN 2 /* lower Roman Number list head */ 71 #define L_LROMAN 3 /* upper Roman Number list head */ 72 #define L_SALPHA 4 /* Alphabetic(small) list head */ 73 #define L_LALPHA 5 /* Alphabetic(large) list head */ 74 #define L_ENUM_MAX 6 /* type <= L_ENUM_MAX are enum list */ 75 #define L_BULLET 7 /* Bullet list head */ 76 #define L_DASH 8 /* Dash list head */ 77 #define L_DLIST 9 /* Description list */ 78 short listType; /* type of list if listHead==T */ 79 #define LH_PAREN 1 /* both side parenthesis (1) */ 80 #define LH_RPAREN 2 /* right side parenthesis 1) */ 81 #define LH_BRACKET 3 /* both side bracket [1] */ 82 #define LH_RBRACKET 4 /* right side bracket 1] */ 83 #define LH_DOTTED 5 /* both side parenthesis 1. */ 84 short listHint; /* more info for list */ 85 short headLen; /* length of the Head (list, secnum) */ 86 short secDepth; /* depth of section */ 87 short listNum; /* value of list (also used for ftitle) */ 88 #ifdef DEBUG 89 short printed; 90 #endif 91 struct text *next; 92 }; 93 94 /* 95 * Text Block structure 96 */ 97 struct textBlock { 98 #define TB_SECNUM 1 /* section number */ 99 #define TB_PLAIN 2 /* plain text */ 100 #define TB_QUOTE 3 /* quoted text (>> etc) */ 101 #define TB_EXAMPLE 4 /* Example (verbatim) */ 102 #define TB_TABLE 5 /* table */ 103 #define TB_LIST 6 /* list */ 104 #define TB_LISTHD 7 /* list head */ 105 #define TB_PAGE 8 /* new page */ 106 #define TB_SPACE 9 /* open region */ 107 #define TB_PICTURE 10 /* picture */ 108 #define TB_RIGHT 11 /* output device specific*/ 109 #define TB_CENTER 12 /* output device specific*/ 110 #define TB_RAW 13 /* output device specific*/ 111 #define TB_FTITLE 14 /* figure/table titles */ 112 #define TB_APPENDIX 15 /* appendix */ 113 #define TB_CAPSULE 16 /* encapsulation */ 114 #define TB_COMMENT 17 /* to be ignored */ 115 short type; /* Type of block */ 116 short rbegin; /* Region begin */ 117 short rend; /* Region end */ 118 short hinted; /* hint exists */ 119 /* Pointer to ListHead (for LIST,LISTHD)*/ 120 struct textBlock *nextBlock; 121 struct textBlock *superBlock; 122 }; 123 struct strVal { 124 char *pattern; 125 short value; 126 }; 127 /* 128 * Character translation table (for textQuote) 129 */ 130 struct transTable { 131 char special_char; 132 char *trans_to; 133 }; 134 135 #define MSG0(format)\ 136 if (verbose) (void)fprintf(stderr, format) 137 #define MSG1(format, val)\ 138 if (verbose) (void)fprintf(stderr, format, val) 139 #define MSG2(format, val1, val2)\ 140 if (verbose) (void)fprintf(stderr, format, val1, val2) 141 #define MSG3(format, val1, val2, val3)\ 142 if (verbose) (void)fprintf(stderr, format, val1, val2, val3) 143 #define MSG4(format, val1, val2, val3, val4)\ 144 if (verbose) (void)fprintf(stderr, format, val1, val2, val3,val4) 145 #ifdef DEBUG 146 #define DBG0(level, format)\ 147 if (debug >= level) (void)fprintf(stderr, format) 148 #define DBG1(level, format, val)\ 149 if (debug >= level) (void)fprintf(stderr, format, val) 150 #define DBG2(level, format, val1, val2)\ 151 if (debug >= level) (void)fprintf(stderr, format, val1, val2) 152 #define DBG3(level, format, val1, val2, val3)\ 153 if (debug >= level) (void)fprintf(stderr, format, val1, val2, val3) 154 #define DBG4(level, format, val1, val2, val3, val4)\ 155 if (debug >= level) (void)fprintf(stderr, format, val1, val2, val3,val4) 156 #define PRINTED(lnum) {if (texts[lnum]->printed++)\ 157 fprintf(stderr, "ERROR: duplicated output %d:%s\n",lnum, texts[lnum]->body);} 158 #define PRINTED2(l1, l2) {int i; for (i=l1; i<l2; i++)PRINTED(i);} 159 #else 160 #define DBG0(level, format) 161 #define DBG1(level, format, val) 162 #define DBG2(level, format, val1, val2) 163 #define DBG3(level, format, val1, val2, val3) 164 #define DBG4(level, format, val1, val2, val3, val4) 165 #define PRINTED(lnum) 166 #define PRINTED2(l1, l2) 167 #endif 168 169 #define abs(x) ((x)>0?(x):-(x)) 170 #define sign(x) ((x)>0?1:-1) 171 #define max(a,b) (a>b?a:b) 172 #define min(a,b) (a<b?a:b) 173 #define alphaVal(c) ((c) - 'a' + 1) 174 #define isBlank(l) (texts[l]->length == 0 || texts[l]->block != NULL) 175 #define str2match(s1, s2) ((*(s1) == *(s2)) && (*((s1) + 1) == *((s2) + 1))) 176 177 /* 178 * Parameters for Parsing 179 */ 180 extern int tableEnabled; /* Enables Table */ 181 extern int jisTableEnabled; /* JIS Wakusen Table enabled */ 182 extern int indentedSecnum; /* Section number maybe indented*/ 183 extern int picEnabled; /* Enables Picture */ 184 extern int tableFactor; /* Table judgement factor */ 185 extern int examFactor; /* Example judgement factor 186 * bigger number cause more example 187 */ 188 extern int removePaging; /* remove Paging (Header Footer lines) 189 * in the original text 190 */ 191 extern int crossRefer; /* Fig/Picture/Section reference*/ 192 extern char *texStyleOpt; /* TeX Style option */ 193 #define MM_MACRO 1 194 #define MS_MACRO 2 195 extern int roffMacro; /* roff macro (ms or mM) */ 196 extern int renumber; /* Only renumbering (section & list)*/ 197 /* 198 * Output parameters 199 */ 200 extern int pageWidth; /* Page width (in point) */ 201 extern int rawOutput; /* text quote enabled(non through)*/ 202 extern int halfCooked; /* half cooked mode (not raw) */ 203 #define CODE_EUC 0 204 #define CODE_JIS 1 205 #define CODE_SJIS 2 206 extern int outputCode; /* output code (JIS/EUC/SJIS) */ 207 extern int inputCode; /* input code (JIS,EUC/SJIS) */ 208 extern int preamble; /* preamble block */ 209 extern int accurateSecnum; /* Accurate section number output*/ 210 extern int listDecor; /* List decoration */ 211 extern int reflectSpace; /* reflect space lines */ 212 extern int texQuote; /* Use \verb| | for tex output */ 213 #ifdef HTML 214 extern int htmlOnce; /* One/Multi-path flag for HTML */ 215 extern int htmlHere; /* flag of pic/tbl here or not */ 216 #endif 217 extern int indexEnabled; /* Enables Indexing */ 218 extern int fontSize; /* font size */ 219 extern int fontSpecified; /* font size specified */ 220 extern int useJverb; /* use jverbatim (Nide) */ 221 /* */ 222 extern FILE *inFile; /* intput File */ 223 extern struct text **texts; /* texts[lineNum] array of text 224 * lineNum is 1 origin */ 225 extern struct text *textTop; /* Top of text structure */ 226 extern struct textBlock *pageBp; /* Top of new page block */ 227 extern int textLines; /* Text lines */ 228 extern int textBegin; /* Where text body begins */ 229 extern int rightMargin; /* Right margin of the text */ 230 extern int japaneseText; /* Japanese text */ 231 extern char *fname; /* Input file name */ 232 extern int verbose; /* verbose(generate warnings) */ 233 extern int titleStyle; /* TeX style */ 234 extern int inlineHint; /* Inline hint */ 235 extern char *plain2Lib; /* Plain2 library path */ 236 extern int anySection; /* if any section output exists */ 237 #ifdef DEBUG 238 extern int debug; /* Debug level */ 239 #endif 240 /* 241 * Constants for title block 242 */ 243 #define IND_CENTER 1 /* Centering */ 244 #define IND_RIGHT 2 /* Right justification */ 245 #define IND_RESUME 3 /* Resume from indentation */ 246 #define IND_INDENT 4 /* Resume from indentation */ 247 248 #define TITLE_A47 1 249 #define TITLE_A47_1 2 250 #define TITLE_OHP 3 251 252 /* Definition for begin/end */ 253 #define BEGIN 1 254 #define END 0 255 256 /* Definitions for spacing */ 257 #define SP_BLANK 1 258 #define SP_PAGE 2 259 #define SP_NEWLINE 3 260 #define SP_SPACE 4 261 262 char *codeCvt(); 263 char *sftj2eucStr(); 264 char *euc2sftjStr(); 265 char *euc2jisStr(); 266 char *strsave(); 267 char *strNum(); 268 char *textQuote(); 269 char *roffTextQuote(); 270 struct text *prevLine(); 271 struct text *nextLine(); 272 struct textBlock *prevBlock(); 273 struct textBlock *nextBlock(); 274 struct textBlock *newTextBlock(); 275 char *listSecBody(); 276 int dumpText(); 277 int markIfList(); 278 int markIfPicture(); 279 int markIfExample(); 280 int markAsPlain(); 281 int markIfQuote(); 282 int markIfTable(); 283 struct picLineElm *picLineMatch(); 284 struct picMiscLines *picMiscMatch(); 285 286 /* 287 * Output driver 288 */ 289 struct outDev { 290 /* 291 * Text (in {roff/tex}output.c) 292 */ 293 int (*plain)(); /* plain text */ 294 int (*example)(); /* example line */ 295 int (*listBlock)(); /* List Block (begin/end) */ 296 int (*dlistItem)(); /* description list */ 297 int (*listItem)(); /* enum/item list */ 298 int (*rawText)(); /* Raw text output */ 299 int (*space)(); /* Blank lines */ 300 int (*capsule)(); /* Capsule block */ 301 int (*comment)(); /* Comment out */ 302 #ifdef PICTURE 303 /* 304 * Picture 305 */ 306 int (*pictureBlock)(); /* Picture Block (begin/end) */ 307 int (*picLine)(); /* line */ 308 int (*picArc)(); /* arc */ 309 int (*picText)(); /* text */ 310 int (*picLineWidth)(); /* Set line width */ 311 #endif 312 /* 313 * Table 314 */ 315 int (*table)(); /* Table */ 316 int (*fTitle)(); /* Figure/Table title */ 317 int (*title)(); /* Document title */ 318 /* 319 * Quoting 320 */ 321 char *(*quote1)(); 322 char *(*quote2)(); 323 }; 324 extern struct outDev roffPut; 325 extern struct outDev texPut; 326 #ifdef HTML 327 extern struct outDev htmlPut; 328 #endif 329 extern struct outDev *put; 330 331 #define INLINE_BEGIN "((" 332 #define INLINE_END "))" 333 #define INLINE_BEGIN_LEN sizeof(INLINE_BEGIN) 334 #define INLINE_END_LEN sizeof(INLINE_END) 335 336 #define IL_PLAIN 0 337 #define IL_RAW 1 338 #define IL_FOOTNOTE 2 339 #define IL_REFERENCE 3 340 #define IL_BOLD 4 341 #define IL_INDEX 5 342 343 extern char *malloc(); 344 345 #define INTERNAL_CODE CODE_EUC 346 347 #ifdef BSD 348 #include <strings.h> 349 #else 350 #include <string.h> 351 #define index(s,c) strchr(s,c) 352 #define bzero(buff, bytes) memset(buff, 0, bytes) 353 #endif 354 #ifdef __MSDOS__ /* for Turbo C, Borland C */ 355 #define MSDOS 1 356 #endif 357