| enum slugtypes { |
| NONE, // can't happen |
| VBOX, // Vertical Box -- printable stuff |
| SP, // paddable SPace |
| BS, // start Breakable Stream |
| US, // start Unbreakable Stream |
| BF, // start Breakable Float |
| UF, // start Unbreakable Float |
| PT, // start Page Top material (header) |
| BT, // start page BoTtom material (footer) |
| END, // ENDs of groups |
| NEUTRAL, // NEUTRALized slugs can do no harm (cf. CIA) |
| PAGE, // beginning of PAGE in troff input |
| TM, // Terminal Message to appear during output |
| COORD, // output page COORDinates |
| NE, // NEed command |
| MC, // Multiple-Column command |
| CMD, // misc CoMmanDs: FC, FL, BP |
| PARM, // misc PARaMeters: NP, FO |
| LASTTYPE // can't happen either |
| }; |
| |
| enum cmdtypes { |
| FC, // Freeze 2-Column material |
| FL, // FLush all floats before reading more stream |
| BP // Break Page |
| }; |
| |
| enum parmtypes { |
| NP, // distance of top margin from page top (New Page) |
| FO, // distance of bottom margin from page top (FOoter) |
| PL, // distance of physical page bottom from page top (Page Length) |
| MF, // minimum fullness required for padding |
| CT, // tolerance for division into two columns |
| WARN, // warnings to stderr? |
| DBG // debugging flag |
| }; |
| |
| class slug { |
| int serialnum; |
| int dp; // offset of data for this slug in inbuf |
| int linenum; // input line number (approx) for this slug |
| short font; // font in effect at slug beginning |
| short size; // size in effect at slug beginning |
| short seen; // 0 until output |
| short ncol; // number of columns (1 or 2) |
| short offset; // horizontal offset for 2 columns |
| public: |
| short type; // VBOX, PP, etc. |
| short parm; // parameter |
| short base; // "depth" of this slug (from n command) |
| int hpos; // abs horizontal position |
| int dv; // height of this slug above its input Vpos |
| union { |
| int ht; // "height" of this slug (from n command) |
| int parm2; // second parameter, since only VBOXes have ht |
| }; |
| friend slug getslug(FILE *); |
| friend void checkout(); |
| friend slug eofslug(); |
| void coalesce(); // with next slug in array slugs[] |
| void neutralize(); // render this one a no-op |
| void dump(); // dump its contents for debugging |
| char *headstr(); // string value of text |
| void slugout(int); // add the slug to the output |
| char *typename(); // printable slug type |
| int serialno() { return serialnum; } |
| int numcol() { return ncol; } |
| int lineno() { return linenum; } |
| }; |
| |
| // functions in slug.c |
| slug eofslug(); |
| slug getslug(FILE *); |