5 public class Unicode2Tex {
7 private static HashMap<Integer,String> table = new HashMap<Integer,String>();
8 private static HashSet<Integer> warned = new HashSet<Integer>();
10 public static void main(String[] args) throws Exception {
12 BufferedReader tabletxt =
13 new BufferedReader(new InputStreamReader(Unicode2Tex.class
14 .getClassLoader().getResource("table.utf8.txt").openStream(),
17 while ( (s = tabletxt.readLine()) != null ) {
18 if (s.length() < 2) continue;
20 int code = Integer.parseInt(s.substring(0, s.indexOf(' ')) ,16);
21 String tex = s.substring(s.indexOf(' ')+1).trim();
26 BufferedReader in = new BufferedReader(new InputStreamReader(System.in, "UTF-8"));
27 PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out, "ASCII"));
28 PrintWriter err = new PrintWriter(new OutputStreamWriter(System.err, "UTF-8"));
31 while ( (c = in.read()) != -1 ) {
36 case '\n': out.println("\\\\"); break;
38 case ' ' : out.print("{\\phantom{X}}"); break;
39 case '\\': out.print("{\\char`\\\\}"); break;
40 case '~' : out.print("{\\rlap{\\lower.85ex\\hbox{\\large\\char126}}\\ }"); break;
41 case '{' : out.print("{\\char123}"); break;
42 case '}' : out.print("{\\char125}"); break;
43 case '_' : out.print("{\\char95}"); break;
44 case '$' : out.print("{\\$}"); break;
45 case '%' : out.print("{\\%}"); break;
46 case '&' : out.print("{\\&}"); break;
47 case '^' : out.print("{\\text{\\textasciicircum}}"); break;
48 case '`' : out.print("{`}"); break;
50 if (i >= 0x30 && i <= 0x7a) out.print((char)c);
52 if (s.startsWith("$")) {
53 out.print("{\\rlap{"+s+"}\\ }");
60 if (!warned.contains(i)) {
61 err.println("warning: character '"+c+"' (0x"+(Integer.toString(i, 16))+") not found in stix table");