|
|
1.1 ! root 1: %{ ! 2: /* NOTICE-NOT TO BE DISCLOSED OUTSIDE BELL SYS EXCEPT UNDER WRITTEN AGRMT */ ! 3: /* Writer's Workbench version x.x, date */ ! 4: ! 5: #include <ctype.h> ! 6: #undef YYLMAX ! 7: #define YYLMAX 500 ! 8: #undef input ! 9: #undef unput ! 10: #define OFF 0 ! 11: int ineqn = 0; ! 12: int low = 0; ! 13: %} ! 14: int flag,c,n,i,bracket,slash,save; ! 15: flag=0; ! 16: bracket=0; ! 17: slash=0; ! 18: save=0; ! 19: %e 1500 ! 20: %p 4000 ! 21: %a 3000 ! 22: %START ENDM ! 23: U [A-Z] ! 24: A [A-Za-z] ! 25: O [^A-Za-z] ! 26: L [a-z] ! 27: N [0-9i] ! 28: B [\ \n\t] ! 29: S [\ \t] ! 30: D [0-9.] ! 31: %% ! 32: (et{B}+al|a"."d|A"."M|a"."m|b"."c|Ch|{B}ch|{B}ckts|Corp|dB|Dept|dept|Depts|depts)"." | ! 33: etc"..." | ! 34: (Dr|Drs|e"."g|Eq|eq|etc|Fig|Figs|fig|figs)"." | ! 35: ({B}ft|i"."e|{B}in|Inc|Jr|jr|lb|lbs|{B}mi|Mr|Mrs|Ms|No|{B}no|Nos|nos)"." | ! 36: (P"."{B}*M|p"."m|Ph"."D|Ph"."d|PhD|Ref|ref|Refs|refs|sec|Sec|St|vs|v|yr)"." | ! 37: (Proc|Trans|Conf|Symp)"." | ! 38: (Colo|Calif|Ltd|Ga|Md|Va|Co|Fla)"." | ! 39: (I|II|III|IV|V|VI|VII|VIII|IX|X)"." | ! 40: (mm|\(pp|pp|cf|Cf|hrs|{B}+pl|{B}+al|conj|fem|masc)"." ECHO; ! 41: ! 42: ! 43: \"\./{B} { ! 44: /*---------------PERIODS------------------------*/ ! 45: /* ONE: periods go inside quotes before a blank */ ! 46: printf(".\""); ! 47: BEGIN ENDM; ! 48: } ! 49: "''."/{B} {printf(".''"); BEGIN ENDM;} ! 50: ! 51: \".\"\. { /*leave examples as is "a". */ ! 52: ECHO; ! 53: BEGIN ENDM; ! 54: } ! 55: "``"."''." { ! 56: ECHO; ! 57: BEGIN ENDM; ! 58: } ! 59: {D}+\" { /* leave 3". for 3 inches */ ! 60: ECHO; ! 61: } ! 62: \""..."\"\. ECHO; ! 63: "``...''." ECHO; ! 64: \"{D}+\"\. { /* but fix "3.0". */ ! 65: yytext[yyleng-2] = '\0'; ! 66: printf("%s.\"",yytext); ! 67: BEGIN ENDM; ! 68: } ! 69: "``"{D}+"''." { ! 70: yytext[yyleng-3] = '\0'; ! 71: printf("%s.''",yytext); ! 72: BEGIN ENDM; ! 73: } ! 74: ! 75: ! 76: \.\. { ! 77: /* TWO: two periods changed to one. */ ! 78: printf("."); ! 79: BEGIN ENDM; ! 80: /* exceptions */ ! 81: } ! 82: \.\.[.]+ ECHO; ! 83: ". . ." ECHO; ! 84: "..."\"\. ECHO; ! 85: "...''." ECHO; ! 86: ! 87: ^\..*\n { ! 88: /* THREE: to handle troff & preprocessors */ ! 89: if(yytext[1] == 'T' && yytext[2] == 'S'){ ! 90: ECHO; ! 91: skip('T','E',0); ! 92: } ! 93: else if(yytext[1] == 'P' && yytext[2] == 'S'){ ! 94: ECHO; ! 95: skip('P','E',0); ! 96: } ! 97: else if(yytext[1] == 'D' && yytext[2] == 'S'){ ! 98: ECHO; ! 99: skip('D', 'E', 0); ! 100: } ! 101: else if(yytext[1] == 'E' && yytext[2] == 'Q'){ ! 102: ECHO; ! 103: skip('E','N',1); ! 104: } ! 105: else { ! 106: for (i=0;i<yyleng-1;i++) output(yytext[i]); ! 107: yyless(yyleng-1); ! 108: } ! 109: BEGIN 0; ! 110: } ! 111: ! 112: ! 113: {L}\.{B}+{L}[^).] { /* FOUR: Capitalize first word of sentence, ! 114: but not a. or a). **/ ! 115: yytext[yyleng-2]=toupper(yytext[yyleng-2]); ! 116: ECHO; ! 117: } ! 118: ! 119: ! 120: {L}\.{B}*\n\.P.*\n{L}[^).] {/* Cap after .P */ ! 121: yytext[yyleng-2]=toupper(yytext[yyleng-2]); ! 122: ECHO; ! 123: } ! 124: ! 125: <ENDM>{B}+\"{L} | ! 126: <ENDM>{B}+"``"{L} | ! 127: <ENDM>{B}+{L} { /* other sent caps */ ! 128: yytext[yyleng-1] = toupper(yytext[yyleng-1]); ! 129: ECHO; ! 130: BEGIN 0; ! 131: } ! 132: <ENDM>. { ! 133: unput(yytext[0]); ! 134: BEGIN 0; ! 135: } ! 136: ! 137: ! 138: {B}+{L}\.{B}+ { /* Exceptions: ! 139: abbreviations at top not counted as sentences ! 140: (deleted periods in references code) ! 141: don't understand this rule */ ! 142: ECHO; /* a. many is the time...*/ ! 143: } ! 144: ! 145: ! 146: {L}\./{U}{L} { /* FIVE: Put space after sentence end if omitted */ ! 147: ECHO; putchar(' ');} ! 148: ! 149: \.{A}\.{B}+ { /* Exception: the first 2 rules handle i.d. & i.i.d. */ ! 150: ECHO; ! 151: } ! 152: \.{A}\. { ! 153: yyless(yyleng-1); ! 154: ECHO; ! 155: } ! 156: {L}\.{U}{U} ECHO; /*comm.SYS */ ! 157: ! 158: ! 159: ! 160: \.{S}*\)/{B}+{U} { /* SIX: incomplete sentences in parens have . outside*/ ! 161: if(--flag < 0)flag = 0; ! 162: if(flag == 0 && low == 1){ ! 163: printf("\)\."); ! 164: } ! 165: else ECHO; ! 166: low = 0; ! 167: } ! 168: \){S}*\./{B}+{U} { ! 169: if(--flag < 0)flag = 0; ! 170: if(flag == 0 && low == 2) ! 171: printf(".) "); ! 172: else ECHO; ! 173: low = 0; ! 174: } ! 175: \.{S}*\) { ! 176: if(--flag < 0)flag = 0; ! 177: if(flag == 0 && low != 2) ! 178: printf("). "); ! 179: else ECHO; ! 180: low = 0; ! 181: } ! 182: ! 183: et\.{B}*al { /* SEVEN: other */ ! 184: printf("et al."); ! 185: if((c=input()) != '.')unput(c); ! 186: } ! 187: \?\"\. { /* ... transimission?". */ ! 188: ECHO; ! 189: BEGIN ENDM; ! 190: } ! 191: \?"''." { ! 192: ECHO; ! 193: BEGIN ENDM; ! 194: } ! 195: ! 196: ! 197: ! 198: \"\, { /*------------------------------COMMAS----------------------*/ ! 199: /* ONE: commas go inside double quotes */ ! 200: /* leave alone if inside (), may be code */ ! 201: if(flag == 0)printf(",\""); ! 202: else ECHO; ! 203: } ! 204: "''," { ! 205: if(flag == 0)printf(",''"); ! 206: else ECHO; ! 207: } ! 208: ! 209: ! 210: \".\""," { /* Exception */ ! 211: ECHO; /*leave examples as is "a", */ ! 212: } ! 213: "``"."''," ECHO; ! 214: ! 215: ! 216: \,{B}*\( {/* TWO: no commas before ( */ ! 217: if(flag == 0){ ! 218: printf(" "); ! 219: yyless(1); ! 220: save = 1; ! 221: } ! 222: else { ! 223: yyless(1); ! 224: ECHO; ! 225: } ! 226: } ! 227: ! 228: ! 229: \,{B}*\({N}+{A}*\) { /* Exceptions */ ! 230: ECHO; /* , (2) or , (34b) */ ! 231: } ! 232: \,{B}*\({A}\) ECHO; /* , (b) */ ! 233: \)\,{B}*\( ECHO; /* (1), (2),..*/ ! 234: i\.e\.\, | ! 235: e\.g\.\, ECHO; ! 236: ! 237: ! 238: ! 239: \,\, { /* THREE: No ,, except inside (), [], // */ ! 240: if (flag!=0|bracket==1|slash==1) ECHO; ! 241: else printf(","); ! 242: } ! 243: ! 244: ! 245: ! 246: {L}\,/{L} { /* FOUR: put blank after comma */ ! 247: /* except in (), [], // (x,y,,a,3) */ ! 248: if(flag!=0|slash==1|bracket==1) ECHO; ! 249: else {putchar(yytext[0]); printf(", ");} ! 250: } ! 251: {L}\,/{U}{L} {if(flag!=0|slash==1|bracket==1) ECHO; ! 252: else {putchar(yytext[0]); printf(", ");} ! 253: } ! 254: ! 255: \,\.\.\.\, { /* Exception: math */ ! 256: ECHO; ! 257: } ! 258: i\,j | ! 259: x\,y | ! 260: p\,q ECHO; ! 261: ! 262: ! 263: ! 264: ;\" { /*-----------------COLONS & SEMI-COLONS--------------------*/ ! 265: /* ONE: : and ; go outside of quotes */ ! 266: printf("\";"); ! 267: } ! 268: ;"''" printf("'';"); ! 269: :\" { ! 270: if(flag == 0)printf("\":"); ! 271: else ECHO; ! 272: } ! 273: :"''" printf("'':"); ! 274: ! 275: ! 276: \"[;:]\" { /* Exception: when : or ; is quoted, i.e. ";" */ ! 277: ECHO; ! 278: } ! 279: "``"[;:]"''" ECHO; ! 280: ! 281: ! 282: ;; { /* TWO: no double ;; */ ! 283: yyless(1); ! 284: } ! 285: :: { /* no double :: */ ! 286: yyless(1); ! 287: } ! 288: ! 289: \(;;\) { /* Exception: C-code for(;;) */ ! 290: ECHO; ! 291: } ! 292: ! 293: ;{B}*\( { /* THREE: no semicolons before ( */ ! 294: if(flag == 0){ ! 295: printf(" "); ! 296: yyless(1); ! 297: save = 2; ! 298: } ! 299: else { ! 300: yyless(1); ! 301: ECHO; ! 302: } ! 303: } ! 304: ! 305: ! 306: ;{B}*\({N}+\) { /* Exceptions */ ! 307: ECHO; /* ; (2) */ ! 308: } ! 309: ;{B}*\({A}\) ECHO; /* ; (b) */ ! 310: \);{B}*\( ECHO; /* (1); (2);..*/ ! 311: ! 312: ! 313: [;:]/{A} { /* FOUR: put space after ; & : */ ! 314: if(flag == 0){ ! 315: putchar(yytext[0]); putchar(' '); ! 316: } ! 317: else ECHO; ! 318: } ! 319: ! 320: ! 321: ! 322: \?\, { /*----------------------QUESTION MARKS-----------------------*/ ! 323: /* ONE: ?, becomes ? */ ! 324: printf("?"); ! 325: } ! 326: \?\"\, printf("?\""); ! 327: \?"''," printf("?''"); ! 328: ! 329: ! 330: \?\? { /* TWO: ?? becomes ? */ ! 331: yyless(1); ! 332: } ! 333: ! 334: ! 335: {L}\?{B}+{L} { /* THREE: capitalize new sentence after ? */ ! 336: yytext[yyleng-1]=toupper(yytext[yyleng-1]); ! 337: ECHO; ! 338: } ! 339: ! 340: ! 341: {L}\?/{U}{L} { /* FOUR: put space after ? between sentences */ ! 342: ECHO; putchar(' ');} ! 343: ! 344: ! 345: ! 346: \({B}*/{L} { /*----------------------PARENTHESES-----------------------*/ ! 347: /* NOTE: The value of flag tells if you are inside a pair ! 348: of parentheses, low is set if first word started in lower case ! 349: at the first level of parens ! 350: flag=1 and low = 1 if ([a-z] ! 351: flag = 1 and low = 0 if ([^a-z] ! 352: flag = 0 if ) ! 353: bracket & slash toggle between 0 & 1 on \[\] \& \/ ! 354: ONE: for left parens */ ! 355: if(flag == 0) low = 1; ! 356: flag++; ! 357: ECHO; ! 358: } ! 359: \({B}*/{U} { ! 360: if(flag == 0)low = 2; ! 361: flag++; ! 362: ECHO; ! 363: } ! 364: \( { ! 365: if(flag == 0)low = 0; ! 366: flag++; ! 367: ECHO; ! 368: } ! 369: \\\(.. ECHO; /* troff characters */ ! 370: \[ {bracket=1; ECHO;} ! 371: \\ {if(slash==0) slash=1; ! 372: else slash=0; ! 373: ECHO; ! 374: /* TWO: next for right parens */ ! 375: } ! 376: ! 377: ! 378: \?{B}*\) | ! 379: {B}+{A}\.\) | /* ...Jones, A.) */ ! 380: \.{A}\.\) | /* (i.i.d.) */ ! 381: \) { ! 382: if(--flag < 0)flag = 0; ! 383: ECHO; ! 384: if(save == 1)putchar(','); ! 385: if(save==2) putchar(';'); ! 386: save=0; ! 387: } ! 388: ! 389: \)+[,;] { ! 390: if(--flag < 0)flag = 0; ! 391: ECHO; ! 392: save = 0; ! 393: } ! 394: ! 395: \] {bracket=0; ECHO;} ! 396: ! 397: \. { /* all other .'s */ ! 398: ECHO; ! 399: BEGIN ENDM; ! 400: } ! 401: ! 402: %% ! 403: int rdelim = 0; ! 404: int ldelim = 0; ! 405: char del[] = "elim"; ! 406: skip(c1,c2,eqn) ! 407: char c1,c2; ! 408: { ! 409: int c,first; ! 410: char *s; ! 411: first = 1; ! 412: cont: ! 413: while((c=input()) != '.'){ ! 414: ck: ! 415: if(c == 0)return; ! 416: if(c == '\n')first = 1; ! 417: else first = 0; ! 418: putchar(c); ! 419: if(eqn && c == 'd'){ ! 420: for(s=del;*s != '\0';s++){ ! 421: if((c=input()) != *s)goto ck; ! 422: putchar(c); ! 423: } ! 424: while((c=input()) == ' ')putchar(c); ! 425: if(c == '\n' || c == 'o'){ ! 426: ldelim = rdelim = OFF; ! 427: first = 1; ! 428: putchar(c); ! 429: if(c != '\n') ! 430: while((c=input()) != '\n')putchar(c); ! 431: continue; ! 432: } ! 433: putchar(c); ! 434: ldelim = c; ! 435: rdelim = getchar(); ! 436: putchar(c); ! 437: continue; ! 438: } ! 439: } ! 440: if(first != 1){ ! 441: putchar('.'); ! 442: goto cont; ! 443: } ! 444: if((c=input()) != c1){ ! 445: if(c == 0)return; ! 446: putchar('.'); putchar(c); ! 447: if(c == '\n')first = 1; ! 448: else first = 0; ! 449: goto cont; ! 450: } ! 451: if((c=input()) != c2){ ! 452: if(c == 0)return; ! 453: if(c == '\n')first = 1; ! 454: else first = 0; ! 455: printf(".%c%c",c1,c); ! 456: goto cont; ! 457: } ! 458: printf(".%c%c",c1,c2); ! 459: while((c=input()) != '\n'){ ! 460: if(c == 0)return; ! 461: putchar(c); ! 462: } ! 463: unput('\n'); ! 464: } ! 465: char buf[YYLMAX]; ! 466: char *ptr = buf; ! 467: input(){ ! 468: int cc; ! 469: if(ptr != buf){ ! 470: cc = *ptr--; ! 471: if(ldelim == 0)return(cc); ! 472: if(cc != ldelim && ineqn == 0)return(cc); ! 473: if(ineqn == 0){ ! 474: ineqn = 1; ! 475: return(ldelim); ! 476: } ! 477: putchar(cc); ! 478: if(cc == rdelim)goto gotit; ! 479: while(ptr != buf){ ! 480: cc = *ptr--; ! 481: putchar(cc); ! 482: if(cc == rdelim){ ! 483: gotit: ! 484: ineqn = 0; ! 485: if(ptr != buf)return(*ptr--); ! 486: else { ! 487: cc=getchar(); ! 488: return(cc==EOF?0:cc); ! 489: } ! 490: } ! 491: } ! 492: goto more2; ! 493: } ! 494: if(ldelim == 0){ ! 495: cc=getchar(); ! 496: return(cc==EOF?0:cc); ! 497: } ! 498: more: ! 499: if((cc=getchar()) != ldelim && ineqn == 0){ ! 500: return(cc==EOF?0:cc); ! 501: } ! 502: if(ineqn == 0){ ! 503: ineqn = 1; ! 504: return(ldelim); ! 505: } ! 506: putchar(cc); ! 507: if(cc == rdelim){ ! 508: ineqn = 0; ! 509: goto more; ! 510: } ! 511: more2: ! 512: while((cc=getchar()) != rdelim) ! 513: if(cc == EOF){ineqn = 0; return(0);} ! 514: else putchar(cc); ! 515: putchar(cc); ! 516: ineqn = 0; ! 517: goto more; ! 518: } ! 519: unput(cc) ! 520: char cc; ! 521: { ! 522: *(++ptr) = cc; ! 523: if(ineqn && cc == ldelim)ineqn = 0; ! 524: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.