<_utf>[A-Za-z0-9+/] { utf (); }
<_utf>"-" { BEGIN INITIAL; }
<_utf>.|\n { fputc (yytext [0], stdout);
BEGIN INITIAL; }
%%
void utf ()
{
unsigned
i,
c;
i = yytext [0];
if (i >= 'A' && i <= 'Z')
c = i - 'A';
else if (i >= 'a' && i <= 'z')
c = i + 26 - 'a';
else if (i >= '0' && i <= '9')
c = i + 52 - '0';
else if (i == '+')
c = 62;
else if (i == '/')
c = 63;
/*
* iso-8859-15
*/
i = 0;
switch (c) {
case 0x20Ac: i = 0xA4; break; /* euro */
case 0x0160: i = 0xA6; break; /* S caron */
case 0x0161: i = 0xA8; break; /* s caron */
case 0x017D: i = 0xB4; break; /* Z caron */
case 0x017E: i = 0xB8; break; /* z caron */
case 0x0152: i = 0xBC; break; /* OE ligature */
case 0x0153: i = 0xBD; break; /* oe ligature */
case 0x0178: i = 0xBE; break; /* Y diaeresis */
}
if (i) {
fputc (i, stdout);
return;
}
/*
* substitutions
*/
s = NULL;
switch (c) {
case 0x0132: s = "IJ"; break;
case 0x0133: s = "ij"; break;
}
if (s) {
fputs (s, stdout);
return;
}