/* $VER: translate.c 2.1 (05.06.94)
 */

#include "global.h"

/**********************************************************************
 *               Translating ISO-Latin1 -> LaTeX code                 *
 **********************************************************************/
char *translate_to_latex(const char *input)
{
	static char output[512];
	int i = 0, pos = 0;

	while (input[i])
	{
		switch (input[i])
		{
			case '-':
				output[pos++] = '-';
				output[pos++] = '-';
				break;
			case '#':
				output[pos++] = '\\';
				output[pos++] = '#';
				break;
			case '$':
				output[pos++] = '\\';
				output[pos++] = '$';
				break;
			case '%':
				output[pos++] = '\\';
				output[pos++] = '%';
				break;
			case '&':
				output[pos++] = '\\';
				output[pos++] = '&';
				break;
			case '[':
				output[pos++] = '$';
				output[pos++] = '[';
				output[pos++] = '$';
				break;
			case '\\':
				strcpy(&output[pos], "$\\backslash$");
				pos += 12;
				break;
			case ']':
				output[pos++] = '$';
				output[pos++] = ']';
				output[pos++] = '$';
				break;
			case '¡':
				output[pos++] = '!';
				output[pos++] = '`';
				break;
			case '£':
				output[pos++] = '\\';
				output[pos++] = 'i';
				output[pos++] = 't';
				output[pos++] = '\\';
				output[pos++] = '$';
				break;
			case '§':
				output[pos++] = '{';
				output[pos++] = '\\';
				output[pos++] = 'S';
				output[pos++] = '}';
				break;
			case '¿':
				output[pos++] = '?';
				output[pos++] = '`';
				break;
			case 'À':
				output[pos++] = '\\';
				output[pos++] = '`';
				output[pos++] = 'A';
				break;
			case 'Á':
				output[pos++] = '\\';
				output[pos++] = '\'';
				output[pos++] = 'A';
				break;
			case 'Â':
				output[pos++] = '\\';
				output[pos++] = '^';
				output[pos++] = 'A';
				break;
			case 'Ã':
				output[pos++] = '\\';
				output[pos++] = '~';
				output[pos++] = 'A';
				break;
			case 'Ä':
				output[pos++] = '\\';
				output[pos++] = '"';
				output[pos++] = 'A';
				break;
			case 'Å':
				output[pos++] = '\\';
				output[pos++] = 'A';
				output[pos++] = 'A';
				output[pos++] = '{';
				output[pos++] = '}';
				break;
			case 'Æ':
				output[pos++] = '\\';
				output[pos++] = 'A';
				output[pos++] = 'E';
				output[pos++] = '{';
				output[pos++] = '}';
				break;
			case 'Ç':
				output[pos++] = '\\';
				output[pos++] = 'c';
				output[pos++] = ' ';
				output[pos++] = 'C';
				break;
			case 'È':
				output[pos++] = '\\';
				output[pos++] = '`';
				output[pos++] = 'E';
				break;
			case 'É':
				output[pos++] = '\\';
				output[pos++] = '\'';
				output[pos++] = 'E';
				break;
			case 'Ê':
				output[pos++] = '\\';
				output[pos++] = '^';
				output[pos++] = 'E';
				break;
			case 'Ë':
				output[pos++] = '\\';
				output[pos++] = '"';
				output[pos++] = 'E';
				break;
			case 'Ì':
				output[pos++] = '\\';
				output[pos++] = '`';
				output[pos++] = 'I';
				break;
			case 'Í':
				output[pos++] = '\\';
				output[pos++] = '\'';
				output[pos++] = 'I';
				break;
			case 'Î':
				output[pos++] = '\\';
				output[pos++] = '^';
				output[pos++] = 'I';
				break;
			case 'Ï':
				output[pos++] = '\\';
				output[pos++] = '"';
				output[pos++] = 'I';
				break;
			case 'Ñ':
				output[pos++] = '\\';
				output[pos++] = '~';
				output[pos++] = 'N';
				break;
			case 'Ò':
				output[pos++] = '\\';
				output[pos++] = '`';
				output[pos++] = 'O';
				break;
			case 'Ó':
				output[pos++] = '\\';
				output[pos++] = '\'';
				output[pos++] = 'O';
				break;
			case 'Õ':
				output[pos++] = '\\';
				output[pos++] = '~';
				output[pos++] = 'O';
				break;
			case 'Ö':
				output[pos++] = '\\';
				output[pos++] = '"';
				output[pos++] = 'O';
				break;
			case 'Ô':
				output[pos++] = '\\';
				output[pos++] = '^';
				output[pos++] = 'O';
				break;
			case 'Ø':
				output[pos++] = '\\';
				output[pos++] = 'O';
				output[pos++] = '{';
				output[pos++] = '}';
				break;
			case 'Ù':
				output[pos++] = '\\';
				output[pos++] = '`';
				output[pos++] = 'U';
				break;
			case 'Ú':
				output[pos++] = '\\';
				output[pos++] = '\'';
				output[pos++] = 'U';
				break;
			case 'Û':
				output[pos++] = '\\';
				output[pos++] = '^';
				output[pos++] = 'U';
				break;
			case 'Ü':
				output[pos++] = '\\';
				output[pos++] = '"';
				output[pos++] = 'U';
				break;
			case 'Ý':
				output[pos++] = '\\';
				output[pos++] = '\'';
				output[pos++] = 'Y';
				break;
			case 'ß':
				output[pos++] = '\\';
				output[pos++] = 's';
				output[pos++] = 's';
				output[pos++] = '{';
				output[pos++] = '}';
				break;
			case 'à':
				output[pos++] = '\\';
				output[pos++] = '`';
				output[pos++] = 'a';
				break;
			case 'á':
				output[pos++] = '\\';
				output[pos++] = '\'';
				output[pos++] = 'a';
				break;
			case 'â':
				output[pos++] = '\\';
				output[pos++] = '^';
				output[pos++] = 'a';
				break;
			case 'ã':
				output[pos++] = '\\';
				output[pos++] = '~';
				output[pos++] = 'a';
				break;
			case 'ä':
				output[pos++] = '\\';
				output[pos++] = '"';
				output[pos++] = 'a';
				break;
			case 'å':
				output[pos++] = '\\';
				output[pos++] = 'a';
				output[pos++] = 'a';
				output[pos++] = '{';
				output[pos++] = '}';
				break;
			case 'æ':
				output[pos++] = '\\';
				output[pos++] = 'a';
				output[pos++] = 'e';
				output[pos++] = '{';
				output[pos++] = '}';
				break;
			case 'ç':
				output[pos++] = '\\';
				output[pos++] = 'c';
				output[pos++] = ' ';
				output[pos++] = 'c';
				break;
			case 'è':
				output[pos++] = '\\';
				output[pos++] = '`';
				output[pos++] = 'e';
				break;
			case 'é':
				output[pos++] = '\\';
				output[pos++] = '\'';
				output[pos++] = 'e';
				break;
			case 'ê':
				output[pos++] = '\\';
				output[pos++] = '^';
				output[pos++] = 'e';
				break;
			case 'ë':
				output[pos++] = '\\';
				output[pos++] = '"';
				output[pos++] = 'e';
				break;
			case 'ì':
				output[pos++] = '\\';
				output[pos++] = '`';
				output[pos++] = '\\';
				output[pos++] = 'i';
				output[pos++] = '{';
				output[pos++] = '}';
				break;
			case 'í':
				output[pos++] = '\\';
				output[pos++] = '\'';
				output[pos++] = '\\';
				output[pos++] = 'i';
				output[pos++] = '{';
				output[pos++] = '}';
				break;
			case 'î':
				output[pos++] = '\\';
				output[pos++] = '^';
				output[pos++] = '\\';
				output[pos++] = 'i';
				output[pos++] = '{';
				output[pos++] = '}';
				break;
			case 'ï':
				output[pos++] = '\\';
				output[pos++] = '"';
				output[pos++] = '\\';
				output[pos++] = 'i';
				output[pos++] = '{';
				output[pos++] = '}';
				break;
			case 'ñ':
				output[pos++] = '\\';
				output[pos++] = '~';
				output[pos++] = 'n';
				break;
			case 'ò':
				output[pos++] = '\\';
				output[pos++] = '`';
				output[pos++] = 'o';
				break;
			case 'ó':
				output[pos++] = '\\';
				output[pos++] = '\'';
				output[pos++] = 'o';
				break;
			case 'ô':
				output[pos++] = '\\';
				output[pos++] = '^';
				output[pos++] = 'o';
				break;
			case 'õ':
				output[pos++] = '\\';
				output[pos++] = '~';
				output[pos++] = 'o';
				break;
			case 'ö':
				output[pos++] = '\\';
				output[pos++] = '"';
				output[pos++] = 'o';
				break;
			case 'ø':
				output[pos++] = '\\';
				output[pos++] = 'o';
				output[pos++] = '{';
				output[pos++] = '}';
				break;
			case 'ù':
				output[pos++] = '\\';
				output[pos++] = '`';
				output[pos++] = 'u';
				break;
			case 'ú':
				output[pos++] = '\\';
				output[pos++] = '\'';
				output[pos++] = 'u';
				break;
			case 'û':
				output[pos++] = '\\';
				output[pos++] = '^';
				output[pos++] = 'u';
				break;
			case 'ü':
				output[pos++] = '\\';
				output[pos++] = '"';
				output[pos++] = 'u';
				break;
			case 'ý':
				output[pos++] = '\\';
				output[pos++] = '\'';
				output[pos++] = 'y';
				break;
			case 'ÿ':
				output[pos++] = '\\';
				output[pos++] = '"';
				output[pos++] = 'y';
				break;
			default:
				output[pos++] = input[i];
				break;
		}
		i++;
	}
	output[pos] = '\0';

	return output;
}
