|
|
1.1 ! root 1: %{ ! 2: /* NOTICE-NOT TO BE DISCLOSED OUTSIDE BELL SYS EXCEPT UNDER WRITTEN AGRMT */ ! 3: /* Writer's Workbench version 2.0, January 1981 */ ! 4: /* flag=0 means processing is in middle of sentence, */ ! 5: /* flag=1 means have just finished a sentence, */ ! 6: /* flag=2 means should print current sentence at its end */ ! 7: #define MAXCHARS 1000 ! 8: #define STORE if (ptr+yyleng >= str+MAXCHARS) ptr=str; for(i=0;i<yyleng; ++i) *ptr++=yytext[i] ! 9: char *ptr,str[MAXCHARS]; ! 10: %} ! 11: %START IN OUT ! 12: B [\t \n] ! 13: BP [\t \n()"] ! 14: U [A-Z] ! 15: A [a-zA-Z] ! 16: N [0-9] ! 17: %% ! 18: int i,flag,begin,in, eqn; ! 19: in=begin=eqn=0; ! 20: flag=1; ! 21: ptr= str; ! 22: BEGIN OUT; ! 23: ! 24: ^"."DS.*\n | ! 25: ^"."AL.*\n | ! 26: ^"."BL.*\n | ! 27: ^"."VL.*\n | ! 28: ^"."RL.*\n | ! 29: ^"."ML.*\n | ! 30: ^"."DL.*\n | ! 31: ^"."LB.*\n | ! 32: ^"."FS.*\n | ! 33: ^"."EQ.*\n | ! 34: ^"."TS.*\n {in++; BEGIN IN;} ! 35: ! 36: ^"."TE.*\n | ! 37: ^"."FE.*\n | ! 38: ^"."LE.*\n | ! 39: ^"."EN.*\n | ! 40: ^"."DE.*\n {in--; if(in <=0) BEGIN OUT;} ! 41: ! 42: ^"."EQ{B}+delim{B}+\$\${B}+"."EN{B}+ eqn=1; ! 43: \$[^$\n]*\$ {if (eqn==1); ! 44: else REJECT; ! 45: } ! 46: ! 47: ^"."TL.*\n.*\n | ! 48: ^"."AS.*\n | ! 49: ^"."AE.*\n | ! 50: ^"."MT.*\n | ! 51: ^"."TM.*\n | ! 52: ^"."AU.*\n ECHO; ! 53: ! 54: ^"."ce.*\n ; ! 55: ! 56: <OUT>^"."P.*\n | ! 57: <OUT>^"."H.*\n {if(ptr> str){ ! 58: if (*ptr!='\0') { ! 59: *ptr='\0'; ! 60: } ! 61: printf("%s",str); ! 62: } ! 63: flag=2; /* flag==2 means print next sentence */ ! 64: ptr= str; ! 65: ECHO; ! 66: } ! 67: ! 68: <OUT>^"."I{B}+\".*\" {for(i=4; i<yyleng-1;i++) *ptr++=yytext[i];} ! 69: <OUT>^"."I{B}+/[^"].*\n ; ! 70: ! 71: <OUT>^"."[^I].*\n {if(begin==0) ECHO; ! 72: else ; ! 73: } ! 74: ! 75: <OUT>(et"."{B}+al|a"."d|A"."M|a"."m|b"."c|Ch|{B}ch|{B}ckts|dB|Dept|dept|Depts|depts)"." | ! 76: <OUT>(Dr|Drs|e"."g|Eq|eq|et"."al|etc|Fig|fig|Figs|figs)"." | ! 77: <OUT>({B}ft|i"."e|{B}in|Inc|Jr|jr|lb|lbs|{B}mi|Mr|Mrs|Ms|No|{B}no|Nos|{B}nos)"." | ! 78: <OUT>(P"."{B}*M|p"."m|Ph"."D|Ph"."d|PhD|Ref|ref|Refs|refs|sec|St|vs|v|yr)"." | ! 79: <OUT>"."{N} |/* this is the main place text is stored to be output later */ ! 80: <OUT>{B}+{A}"."{B}+ | ! 81: <OUT>"\n" | ! 82: <OUT>. {if(flag==1) {ptr= str; ! 83: flag=0; ! 84: } ! 85: STORE; ! 86: begin=1; ! 87: } ! 88: ! 89: <OUT>\:/.*\n"."TS |/* end a list,table, display after the preceding "*"*/ ! 90: <OUT>\:/.*\n"."DS | ! 91: <OUT>\:/.*\n".".L {BEGIN IN; ! 92: if(flag==2){ ! 93: if(ptr > str){*ptr++=':'; ! 94: *ptr++='.'; ! 95: *ptr++='\0'; ! 96: printf("%s\n",str); ! 97: } ! 98: flag=1; ! 99: ptr= str; ! 100: } ! 101: else {flag=1; ! 102: *ptr++=':'; ! 103: *ptr++='.'; ! 104: } ! 105: } ! 106: <OUT>[.?][ \t]*\n/"."[^PH] | /* if sentence end & flag==2, print it */ ! 107: <OUT>[.?]{BP}+/{U} {if(flag==2){ ! 108: if(ptr > str){*ptr++=yytext[0]; ! 109: *ptr++='\0'; ! 110: printf("%s\n",str); ! 111: } ! 112: flag=1; ! 113: ptr= str; ! 114: } ! 115: else {flag=1; ! 116: } ! 117: } ! 118: ! 119: <IN>. ; ! 120: <IN>\n ; ! 121: %% ! 122: yywrap(){ ! 123: if(ptr> str) {*ptr++='\0'; ! 124: printf("%s",str); ! 125: } ! 126: return(1); ! 127: } ! 128: main(argc,argv) ! 129: char *argv[]; ! 130: { ! 131: if(argc <= 1) ! 132: yylex(); ! 133: else { ! 134: while(argc > 1){ ! 135: argc--; argv++; ! 136: if(freopen(argv[0],"r",stdin) == NULL){ ! 137: fprintf(stderr,"org cannot open %s\n",argv[0]); ! 138: exit(1); ! 139: } ! 140: yylex(); ! 141: } ! 142: } ! 143: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.