Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Posting-Version: version B 2.10.2 9/18/84; site utcsri.UUCP Path: utzoo!utcsri!panos From: panos@utcsri.UUCP (Panos Economopoulos) Newsgroups: net.nlang.greek Subject: Greek Typesetting #5 - Programa Manwli Kateveni - rules.l Message-ID: <1603@utcsri.UUCP> Date: Tue, 5-Nov-85 13:19:41 EST Article-I.D.: utcsri.1603 Posted: Tue Nov 5 13:19:41 1985 Date-Received: Tue, 5-Nov-85 13:49:33 EST Distribution: net Organization: CSRI, University of Toronto Lines: 147 %START LAT GRK %{ #include "accents.h" %} %% char prevMo='L'; /* previous "Mode": 'L' (LAT), or 'G' (GRK) */ int capToAcc=0; /* flag: convert next capital to accented */ BEGIN LAT; /* default "font" is LAT (latin) */ ^".".* { ECHO; /* full-line troff commands get echoed; there is NO translation * of their arguments. .ft-type commands get caught below, * because that is a longer match */ /* in-line troff commands (except for \f[RBIP] -- see below) * are NOT understood, and will get translated, in GRK-mode; * this will usually ruin them */ }\\fG | ^\.("ft ")?G\n { prevMo='L'; BEGIN GRK; } \\fG | ^\.("ft ")?G\n { prevMo='G'; } \\fL | ^\.("ft ")?L\n { prevMo='L'; } \\f[RBI] | ^\.("ft ")?[RBI]\n { prevMo='L'; ECHO; } \\fL | ^\.("ft ")?L\n { prevMo='G'; BEGIN LAT; } \\f[RBI] | ^\.("ft ")?[RBI]\n { prevMo='G'; BEGIN LAT; ECHO;} \\fP | ^\.ft(" P")?\n { if (prevMo=='G') BEGIN GRK; ECHO; /* restore BOTH the previous mode (LAT/GRK), * and the previous latin font (R, B, or I) */ } \\fP | ^\.ft(" P")?\n { if (prevMo=='L') BEGIN LAT; /* restore ONLY the previous mode (LAT/GRK) */ } ([a-z]|ii|th|ch|ps|Ii|Th|Ch|Ps)[AEHIOYUW] { capToAcc=1; REJECT; /* set flag to interpret upper-case letter as accented lower- * case one, and then go back to normal processing */ } a fputs("\\(*a", stdout); v|b fputs("\\(*b", stdout); g fputs("\\(*g", stdout); d fputs("\\(*d", stdout); e fputs("\\(*e", stdout); z fputs("\\(*z", stdout); ii|h fputs("\\(*y", stdout); th fputs("\\(*h", stdout); i fputs("\\(*i", stdout); k fputs("\\(*k", stdout); l fputs("\\(*l", stdout); m fputs("\\(*m", stdout); n fputs("\\(*n", stdout); x fputs("\\(*c", stdout); o fputs("\\(*o", stdout); p fputs("\\(*p", stdout); r fputs("\\(*r", stdout); s/[a-zAEHIOYUW'] fputs("\\(*s", stdout); s/[^a-zAEHIOYUW'] { #ifdef IMAGEN ECHO; /* the Imagen laser-printer has no terminal-sigma(!) */ #else fputs("\\(ts", stdout); #endif } t fputs("\\(*t", stdout); y|u fputs("\\(*u", stdout); f fputs("\\(*f", stdout); ch fputs("\\(*x", stdout); ps fputs("\\(*q", stdout); w fputs("\\(*w", stdout); A { if (capToAcc) { fputs(aAcc, stdout); capToAcc=0; } else putchar('A'); } B|V fputs("\\(*B", stdout); G fputs("\\(*G", stdout); D fputs("\\(*D", stdout); E { if (capToAcc) { fputs(eAcc, stdout); capToAcc=0; } else putchar('E'); } II|Ii|H { if (capToAcc) { fputs(hAcc, stdout); capToAcc=0; } else putchar('H'); } TH|Th fputs("\\(*H", stdout); I { if (capToAcc) { fputs(iAcc, stdout); capToAcc=0; } else putchar('I'); } L fputs("\\(*L", stdout); X fputs("\\(*C", stdout); O { if (capToAcc) { fputs(oAcc, stdout); capToAcc=0; } else putchar('O'); } P fputs("\\(*P", stdout); R putchar('P'); S fputs("\\(*S", stdout); Y|U { if (capToAcc) { fputs(uAcc, stdout); capToAcc=0; } else fputs("\\(*U", stdout); } F fputs("\\(*F", stdout); CH|Ch putchar('X'); PS|Ps fputs("\\(*Q", stdout); W { if (capToAcc) { fputs(wAcc, stdout); capToAcc=0; } else fputs("\\(*W", stdout); } 'a fputs(aAcc, stdout); 'e fputs(eAcc, stdout); 'ii|'h fputs(hAcc, stdout); 'i fputs(iAcc, stdout); 'o fputs(oAcc, stdout); 'y|'u fputs(uAcc, stdout); 'w fputs(wAcc, stdout); 'A fputs(AAcc, stdout); 'E fputs(EAcc, stdout); 'II|'Ii|'H fputs(HAcc, stdout); 'I fputs(IAcc, stdout); 'O fputs(OAcc, stdout); 'Y|'U fputs(UAcc, stdout); 'W fputs(WAcc, stdout); :i: fputs(iDial, stdout); :y:|:u: fputs(uDial, stdout); :'i: fputs(iDiAc, stdout); :'y:|:'u: fputs(uDiAc, stdout); :I: fputs(IDial, stdout); :Y:|:U: fputs(UDial, stdout); -- Panos Economopoulos UUCP: {decvax,linus,ihnp4,uw-beaver,allegra,utzoo}!utcsri!panos CSNET: panos@toronto