/* Filter to convert between 7- and 8-bit representations of characters with diacritical marks in TeX. compile: gcc -o 8bitify 8bitify.c usage, e.g. "cat foo.tex | 8bitify > foo8.tex" Allin Cottrell, July 1998. */ #include int translate(int a, int nextc) { if (a == '\'' && nextc == 'E') return 0311; if (a == '\'' && nextc == 'e') return 0351; if (a == '`' && nextc == 'A') return 0300; if (a == '`' && nextc == 'E') return 0310; if (a == '`' && nextc == 'U') return 0331; if (a == '`' && nextc == 'a') return 0340; if (a == '`' && nextc == 'e') return 0350; if (a == '`' && nextc == 'u') return 0371; if (a == '^' && nextc == 'A') return 0302; if (a == '^' && nextc == 'E') return 0312; if (a == '^' && nextc == 'I') return 0316; if (a == '^' && nextc == 'O') return 0324; if (a == '^' && nextc == 'U') return 0333; if (a == '^' && nextc == 'a') return 0342; if (a == '^' && nextc == 'e') return 0352; if (a == '^' && nextc == 'i') return 0356; if (a == '^' && nextc == 'o') return 0364; if (a == '^' && nextc == 'u') return 0373; if (a == '\"' && nextc == 'E') return 0313; if (a == '\"' && nextc == 'I') return 0317; if (a == '\"' && nextc == 'U') return 0334; if (a == '\"' && nextc == 'e') return 0353; if (a == '\"' && nextc == 'i') return 0357; if (a == '\"' && nextc == 'u') return 0374; if (a == 'c' && nextc == 'c') return 0347; if (a == 'c' && nextc == 'C') return 0307; } int main(void) { int accentflag, braceflag; int accents[5] = {'\'', '`', '^', '\"', 'c'}; int c, a, nextc, i; do { c = getchar(); if (c == '\\') { accentflag = 0; braceflag = 0; a = getchar(); for (i=0; i<5 ; i++) { if (a == accents[i]) { accentflag = 1; /* ascii 123 = left brace */ if (a == 'c') { /* cedilla? special */ nextc = getchar(); if (nextc != 123) { /* this is not a cedilla */ putchar('\\'); putchar(a); putchar(nextc); /* put it back unchanged */ } else { /* Found "\c", left-brace */ braceflag = 1; nextc = getchar(); printf("%c", translate(a,nextc)); } } else { /* char after "\" was an accent other than "c" */ nextc = getchar(); if (nextc == 123) { braceflag = 1; nextc = getchar(); } printf("%c", translate(a,nextc)); } if (braceflag == 1) getchar(); } } if (accentflag == 0) { putchar('\\'); putchar(a); } } else { if (c != EOF) putchar(c); } } while (c != EOF); return 0; }