%e 3000 %p 6500 %k 3000 %a 8000 %n 2000 %o 8000 %{ /* Andrew Heybey (atheybey@ptt.lcs.mit.edu) 15-JAN-1987 Modified by Neeraj Gupta (goop@athena.mit.edu) 10-MAR-1993 * -2 option allows 2 column output Modified by Jay Ongg (ongg@mit.edu) 27-SEP-1994 * Scheme file support Modified by Erik Nygren (nygren@mit.edu) 13-FEB-1998 * Added Java support */ #define NORM_STATE 1 #define LINECOMMENT_STATE 2 #define QUOTE_STATE 3 #define SQUOTE_STATE 4 #define BLOCKCOMMENT_STATE 5 #ifdef yywrap #undef yywrap #endif int state = NORM_STATE; int pagenum, masterpagenum; int linenum; int scheme_prev_paren = 0; /* used by scheme mode */ int paren_open = 0; int preproc = 0; int filename = 0; int numparen = 0; int newpage; int newcol; int col2; extern int max_lines; extern int page_lines; extern int type; extern int starting; extern char name[], date[]; /* Different types of files that I know how to process */ #define C_FILE_TYPE 1 /* C source (.c & .h files) */ #define CLU_FILE_TYPE 2 /* Clu source (.clu files) */ #define PLAIN_FILE_TYPE 3 /* Plain text files */ #define ARGUS_FILE_TYPE 4 /* Argus source (.arg files) */ #define SCHEME_FILE_TYPE 5 /* Scheme source code (.scm) */ #define JAVA_FILE_TYPE 6 /* Java source code (.java & .pj) */ %} %Start C CLU PLAIN ARG SCHEME JAVA a [aA] b [bB] c [cC] d [dD] e [eE] f [fF] g [gG] h [hH] i [iI] j [jJ] k [kK] l [lL] m [mM] n [nN] o [oO] p [pP] q [qQ] r [rR] s [sS] t [tT] u [uU] v [vV] w [wW] x [xX] y [yY] z [zZ] %% \014 | \014 | \014 | \014 | \014 { /* Handle form feeds */ switch (state) { case QUOTE_STATE: case SQUOTE_STATE: newparen(); ECHO; break; default: makenewpage(); if (paren_open) { fprintf(yyout, ") show "); paren_open = 0; } fprintf(yyout, " showpage restore\n"); newpage = 1; filename = preproc = 0; break; } } \t+ | \t+ | \t+ | \t+ | \t+ | \t+ { makenewpage(); if (paren_open) { fprintf(yyout, ") show\n"); paren_open = 0; } fprintf(yyout, " %d dotab\n", yyleng); } ^\#[a-zA-Z_][a-zA-Z0-9_]* { if (state == NORM_STATE) { makenewpage(); preproc = 1; paren_open = 1; fprintf(yyout, "("); ECHO; } else { newparen(); ECHO; } } \\\" | \\\" { newparen(); fprintf(yyout, "\\\\\"");} \" \" { newparen(); ECHO; switch (state) { case NORM_STATE: state = QUOTE_STATE; break; case QUOTE_STATE: state = NORM_STATE; break; default: break; }} \' | \' { newparen(); ECHO; switch (state) { case NORM_STATE: state = SQUOTE_STATE; break; case SQUOTE_STATE: state = NORM_STATE; break; default: break; } } "(" | "(" {newparen(); fprintf(yyout, "\\(");} ")" | ")" {newparen(); fprintf(yyout, "\\)");} \\ | \\ {newparen(); fprintf(yyout, "\\\\");} "<" | "<" { newparen(); if (preproc) filename = 1; ECHO; } ">" | ">" { newparen(); if (preproc && filename) filename = 0; ECHO; } \n { makenewpage(); if (paren_open) { fprintf(yyout, ") show "); paren_open = 0; } fprintf(yyout, " newline\n"); if (state == LINECOMMENT_STATE) { state = NORM_STATE; fprintf(yyout, "normfont\n"); } if (++linenum >= page_lines) { fprintf(yyout, " showpage restore\n"); newpage = 1; } else if (linenum >= max_lines && !col2) { fprintf(yyout, " restore\n"); newcol = 1; } filename = preproc = 0; } \n { makenewpage(); if (paren_open) { fprintf(yyout, ") show "); paren_open = 0; } fprintf(yyout, " newline\n"); if (++linenum >= page_lines) { fprintf(yyout, " showpage restore\n"); newpage = 1; } else if (linenum >= max_lines && !col2) { fprintf(yyout, " restore\n"); newcol = 1; } filename = preproc = 0; } . | . {newparen(); ECHO;} "/*" | "/*" { makenewpage(); switch (state) { case NORM_STATE: state = BLOCKCOMMENT_STATE; if (paren_open) fprintf(yyout, ") show\n"); fprintf(yyout, "commentfont (/*"); paren_open = 1; break; default: newparen(); ECHO; break; }} "*/" | "*/" { newparen(); switch (state) { case BLOCKCOMMENT_STATE: state = NORM_STATE; if (paren_open) fprintf(yyout, "*/) show\n"); fprintf(yyout, "normfont "); paren_open = 0; break; default: ECHO; break; }} "//" { makenewpage(); switch (state) { case NORM_STATE: state = LINECOMMENT_STATE; if (paren_open) fprintf(yyout, ") show\n"); fprintf(yyout, "commentfont (//"); paren_open = 1; break; default: newparen(); ECHO; break; }} abstract | boolean | break | byte | byvalue | case | cast | catch | char | class | const | continue | default | do | double | else | extends | false | final | finally | float | for | future | generic | goto | if | implements | import | inner | instanceof | int | interface | long | native | new | null | operator | outer | package | private | protected | public | rest | return | short | static | super | switch | synchronized | this | throw | throws | transient | true | try | var | void | volatile | where | while | int | char | float | double | void | struct | union | long | short | unsigned | auto | extern | register | typedef | static | goto | return | sizeof | break | continue | if | else | enum | for | do | while | switch | case | default | entry { makenewpage(); if (state == NORM_STATE && !filename) { if (paren_open) fprintf(yyout, ") show\n"); fprintf(yyout, "reservefont (%s) show \nnormfont ", yytext); if (paren_open) fprintf(yyout, "("); } else {newparen(); ECHO;} } @see:? | @version:? | @author:? | @param:? | @return:? | @exception:? | @deprecated:? | @since:? | @?modifies: | @?effects: | @?overview: | @?requires: | @modifies | @effects | @overview | @requires { makenewpage(); if ((state == BLOCKCOMMENT_STATE || state == LINECOMMENT_STATE) && !filename) { if (paren_open) fprintf(yyout, ") show\n"); fprintf(yyout, "commentreservefont (%s) show \ncommentfont ", yytext); if (paren_open) fprintf(yyout, "("); } else {newparen(); ECHO;} } [a-zA-Z_][a-zA-Z_0-9]* | [a-zA-Z_][a-zA-Z_0-9]* { newparen(); ECHO; } \\\" { newparen(); fprintf(yyout, "\\\\\""); scheme_prev_paren = 0;} \" { newparen(); ECHO; switch (state) { case NORM_STATE: state = QUOTE_STATE; break; case QUOTE_STATE: state = NORM_STATE; break; default: break; scheme_prev_paren = 0; }} \t | " " {newparen(); ECHO; if (state == SQUOTE_STATE && numparen == 0) state = NORM_STATE; scheme_prev_paren = 0; } "(" {newparen(); fprintf(yyout, "\\("); if (state == SQUOTE_STATE) numparen++; scheme_prev_paren = 1; } ")" {newparen(); fprintf(yyout, "\\)"); if (state == SQUOTE_STATE) { numparen--; if (numparen == 0) state = NORM_STATE; } scheme_prev_paren = 0; } \\ {newparen(); fprintf(yyout, "\\\\"); scheme_prev_paren = 0;} \n { makenewpage(); if (paren_open) { fprintf(yyout, ") show "); paren_open = 0; } fprintf(yyout, " newline\n"); if (state == LINECOMMENT_STATE) { state = NORM_STATE; fprintf(yyout, "normfont\n"); } if (++linenum >= page_lines) { fprintf(yyout, " showpage restore\n"); newpage = 1; } else if (linenum >= max_lines && !col2) { fprintf(yyout, " restore\n"); newcol = 1; } if (numparen == 0 && state == SQUOTE_STATE) state = NORM_STATE; scheme_prev_paren = 0; } ";" { makenewpage(); switch (state) { case NORM_STATE: state = LINECOMMENT_STATE; if (paren_open) fprintf(yyout, ") show\n"); fprintf(yyout, "commentfont (;"); paren_open = 1; break; default: newparen(); ECHO; break; } scheme_prev_paren = 0; } . {newparen(); ECHO; scheme_prev_paren = 0;} \' | \` | and | begin | case | cond | define | delay | do | else | if | lambda | let | "let*" | letrec | or | quote | quasiquote | "set!" | unquote | unquote-splicing { makenewpage(); if (state == NORM_STATE && !filename && scheme_prev_paren == 1) { if (paren_open) fprintf(yyout, ") show\n"); fprintf(yyout, "reservefont (%s) show \nnormfont ", yytext); if (paren_open) fprintf(yyout, "("); } else {newparen(); fprintf(yyout, "%s", yytext); } } \\\" { newparen(); fprintf(yyout, "\\\\\"");} \" { newparen(); ECHO; switch (state) { case NORM_STATE: state = QUOTE_STATE; break; case QUOTE_STATE: state = NORM_STATE; break; default: break; }} \' { newparen(); ECHO; switch (state) { case NORM_STATE: state = SQUOTE_STATE; break; case SQUOTE_STATE: state = NORM_STATE; break; default: break; } } "(" {newparen(); fprintf(yyout, "\\(");} ")" {newparen(); fprintf(yyout, "\\)");} \\ {newparen(); fprintf(yyout, "\\\\");} \n { makenewpage(); if (paren_open) { fprintf(yyout, ") show "); paren_open = 0; } fprintf(yyout, " newline\n"); if (state == LINECOMMENT_STATE) { state = NORM_STATE; fprintf(yyout, "normfont\n"); } if (++linenum >= page_lines) { fprintf(yyout, " showpage restore\n"); newpage = 1; } else if (linenum >= max_lines && !col2) { fprintf(yyout, " restore\n"); newcol = 1; } } "%" { makenewpage(); switch (state) { case NORM_STATE: state = LINECOMMENT_STATE; if (paren_open) fprintf(yyout, ") show\n"); fprintf(yyout, "commentfont (%%"); paren_open = 1; break; default: newparen(); ECHO; break; }} . {newparen(); ECHO;} {p}{r}{o}{c} | {e}{n}{d} | {i}{t}{e}{r} | {c}{l}{u}{s}{t}{e}{r} | {t}{y}{p}{e} | {r}{e}{t}{u}{r}{n}{s} | {y}{i}{e}{l}{d}{s} | {s}{i}{g}{n}{a}{l}{s} | {w}{h}{e}{r}{e} | {h}{a}{s} | {i}{n} | {r}{e}{p} | {o}{w}{n} | {n}{u}{l}{l} | {b}{o}{o}{l} | {i}{n}{t} | {r}{e}{a}{l} | {c}{h}{a}{r} | {s}{t}{r}{i}{n}{g} | {a}{n}{y} | {c}{v}{t} | {a}{r}{r}{a}{y} | {s}{e}{q}{u}{e}{n}{c}{e} | {r}{e}{c}{o}{r}{d} | {s}{t}{r}{u}{c}{t} | {o}{n}{e}{o}{f} | {v}{a}{r}{i}{a}{n}{t} | {p}{r}{o}{c}{t}{y}{p}{e} | {i}{t}{e}{r}{t}{y}{p}{e} | {w}{h}{i}{l}{e} | {d}{o} | {f}{o}{r} | {i}{f} | {t}{h}{e}{n} | {e}{l}{s}{e}{i}{f} | {e}{l}{s}{e} | {t}{a}{g}{c}{a}{s}{e} | {o}{t}{h}{e}{r}{s} | {r}{e}{t}{u}{r}{n} | {y}{i}{e}{l}{d} | {s}{i}{g}{n}{a}{l} | {e}{x}{i}{t} | {b}{r}{e}{a}{k} | {c}{o}{n}{t}{i}{n}{u}{e} | {b}{e}{g}{i}{n} | {r}{e}{s}{i}{g}{n}{a}{l} | {e}{x}{c}{e}{p}{t} | {t}{a}{g} | {w}{h}{e}{n} | {c}{a}{n}{d} | {c}{o}{r} | {f}{o}{r}{c}{e} | {u}{p} | {i}{s} | {d}{o}{w}{n} { makenewpage(); if (state == NORM_STATE && !filename) { if (paren_open) fprintf(yyout, ") show\n"); fprintf(yyout, "reservefont (%s) show \nnormfont ", yytext); if (paren_open) fprintf(yyout, "("); } else {newparen(); ECHO;} } [a-zA-Z_][a-zA-Z_0-9]* { newparen(); ECHO; } \\\" { newparen(); fprintf(yyout, "\\\\\"");} \" { newparen(); ECHO; switch (state) { case NORM_STATE: state = QUOTE_STATE; break; case QUOTE_STATE: state = NORM_STATE; break; default: break; }} \' { newparen(); ECHO; switch (state) { case NORM_STATE: state = SQUOTE_STATE; break; case SQUOTE_STATE: state = NORM_STATE; break; default: break; } } "(" {newparen(); fprintf(yyout, "\\(");} ")" {newparen(); fprintf(yyout, "\\)");} \\ {newparen(); fprintf(yyout, "\\\\");} \n { makenewpage(); if (paren_open) { fprintf(yyout, ") show "); paren_open = 0; } fprintf(yyout, " newline\n"); if (state == LINECOMMENT_STATE) { state = NORM_STATE; fprintf(yyout, "normfont\n"); } if (++linenum >= page_lines) { fprintf(yyout, " showpage restore\n"); newpage = 1; } else if (linenum >= max_lines && !col2) { fprintf(yyout, " restore\n"); newcol = 1; } } "%" { makenewpage(); switch (state) { case NORM_STATE: state = LINECOMMENT_STATE; if (paren_open) fprintf(yyout, ") show\n"); fprintf(yyout, "commentfont (%%"); paren_open = 1; break; default: newparen(); ECHO; break; }} . {newparen(); ECHO;} {p}{r}{o}{c} | {e}{n}{d} | {i}{t}{e}{r} | {c}{l}{u}{s}{t}{e}{r} | {t}{y}{p}{e} | {r}{e}{t}{u}{r}{n}{s} | {y}{i}{e}{l}{d}{s} | {s}{i}{g}{n}{a}{l}{s} | {w}{h}{e}{r}{e} | {h}{a}{s} | {i}{n} | {i}{s} | {r}{e}{p} | {o}{w}{n} | {n}{u}{l}{l} | {b}{o}{o}{l} | {i}{n}{t} | {r}{e}{a}{l} | {c}{h}{a}{r} | {s}{t}{r}{i}{n}{g} | {a}{n}{y} | {c}{v}{t} | {a}{r}{r}{a}{y} | {s}{e}{q}{u}{e}{n}{c}{e} | {r}{e}{c}{o}{r}{d} | {s}{t}{r}{u}{c}{t} | {o}{n}{e}{o}{f} | {v}{a}{r}{i}{a}{n}{t} | {p}{r}{o}{c}{t}{y}{p}{e} | {i}{t}{e}{r}{t}{y}{p}{e} | {w}{h}{i}{l}{e} | {d}{o} | {f}{o}{r} | {i}{f} | {t}{h}{e}{n} | {e}{l}{s}{e}{i}{f} | {e}{l}{s}{e} | {t}{a}{g}{c}{a}{s}{e} | {o}{t}{h}{e}{r}{s} | {r}{e}{t}{u}{r}{n} | {y}{i}{e}{l}{d} | {s}{i}{g}{n}{a}{l} | {e}{x}{i}{t} | {b}{r}{e}{a}{k} | {c}{o}{n}{t}{i}{n}{u}{e} | {b}{e}{g}{i}{n} | {r}{e}{s}{i}{g}{n}{a}{l} | {e}{x}{c}{e}{p}{t} | {t}{a}{g} | {w}{h}{e}{n} | {c}{a}{n}{d} | {c}{o}{r} | {f}{o}{r}{c}{e} | {u}{p} | {d}{o}{w}{n} | {a}{b}{o}{r}{t} | {a}{c}{t}{i}{o}{n} | {a}{t}{o}{m}{i}{c}_{a}{r}{r}{a}{y} | {a}{t}{o}{m}{i}{c}_{r}{e}{c}{o}{r}{d} | {a}{t}{o}{m}{i}{c}_{v}{a}{r}{i}{a}{n}{t} | {b}{a}{c}{k}{g}{r}{o}{u}{n}{d} | {b}{i}{n}{d} | {c}{o}{e}{n}{t}{e}{r} | {c}{r}{e}{a}{t}{o}{r} | {c}{r}{e}{a}{t}{o}{r}{t}{y}{p}{e} | {e}{n}{t}{e}{r} | {e}{q}{u}{a}{t}{e}{s} | {f}{o}{r}{k} | {g}{u}{a}{r}{d}{i}{a}{n} | {h}{a}{n}{d}{l}{e}{r} | {h}{a}{n}{d}{l}{e}{r}{t}{y}{p}{e} | {h}{a}{n}{d}{l}{e}{s} | {i}{m}{a}{g}{e} | {l}{e}{a}{v}{e} | {m}{u}{t}{e}{x} | {n}{o}{d}{e} | {p}{a}{u}{s}{e} | {p}{r}{o}{c}{e}{s}{s} | {r}{e}{c}{o}{v}{e}{r} | {s}{e}{i}{z}{e} | {s}{e}{l}{f} | {s}{t}{a}{b}{l}{e} | {t}{a}{g}{t}{e}{s}{t} | {t}{a}{g}{w}{a}{i}{t} | {t}{e}{r}{m}{i}{n}{a}{t}{e} | {t}{o}{p}{a}{c}{t}{i}{o}{n} | {t}{r}{a}{n}{s}{m}{i}{t} | {w}{t}{a}{g} { makenewpage(); if (state == NORM_STATE && !filename) { if (paren_open) fprintf(yyout, ") show\n"); fprintf(yyout, "reservefont (%s) show \nnormfont ", yytext); if (paren_open) fprintf(yyout, "("); } else {newparen(); ECHO;} } [a-zA-Z_][a-zA-Z_0-9]* { newparen(); ECHO; } "(" {newparen(); fprintf(yyout, "\\(");} ")" {newparen(); fprintf(yyout, "\\)");} \\ {newparen(); fprintf(yyout, "\\\\");} \n { makenewpage(); if (paren_open) { fprintf(yyout, ") show "); paren_open = 0; } fprintf(yyout, " newline\n"); if (++linenum >= page_lines) { fprintf(yyout, " showpage restore\n"); newpage = 1; } else if (linenum >= max_lines && !col2) { fprintf(yyout, " restore\n"); newcol = 1; } } . {newparen(); ECHO;} . { if (starting) { switch (type) { case C_FILE_TYPE: BEGIN C; break; case JAVA_FILE_TYPE: BEGIN JAVA; break; case CLU_FILE_TYPE: BEGIN CLU; break; case SCHEME_FILE_TYPE: BEGIN SCHEME; break; case ARGUS_FILE_TYPE: BEGIN ARG; break; case PLAIN_FILE_TYPE: default: BEGIN PLAIN; break; } starting = 0; paren_open = 0; filename = 0; preproc = 0; state = NORM_STATE; newpage = 1; newcol = 0; pagenum = 0; } yyless(0); } %% yywrap() { if (paren_open) fprintf(yyout, ") show\n"); fprintf(yyout, " normfont\n"); if (!newpage) fprintf(yyout, "showpage restore\n"); BEGIN 0; return(1); } newparen() { makenewpage(); if (!paren_open) { fprintf(yyout, "("); paren_open = 1; } } makenewpage() { if (newcol) { fprintf(yyout, "\n%%%%Page: %d %d Col:2\n", pagenum, masterpagenum); fprintf(yyout, "save\n"); fprintf(yyout, "topcol2\n"); switch(state) { case NORM_STATE: case QUOTE_STATE: case SQUOTE_STATE: fprintf(yyout, "normfont\n"); break; case LINECOMMENT_STATE: case BLOCKCOMMENT_STATE: fprintf(yyout, "commentfont\n"); break; } newcol = 0; col2 = 1; } if (newpage) { pagenum++; masterpagenum++; linenum = 0; fprintf(yyout, "\n%%%%Page: %d %d Col:1\n", pagenum, masterpagenum); fprintf(yyout, "save 0 setlinewidth\n"); fprintf(yyout, "%d (%s) (%s) makeheader\n", pagenum, name, date); switch(state) { case NORM_STATE: case QUOTE_STATE: case SQUOTE_STATE: fprintf(yyout, "normfont\n"); break; case LINECOMMENT_STATE: case BLOCKCOMMENT_STATE: fprintf(yyout, "commentfont\n"); break; } newpage = 0; col2 = 0; } }