Mercurial > hg > octave-nkf
view scripts/java/org/octave/TeXtranslator.java @ 17530:0f45d9dd8107
test: Fix 4 failing plot demos.
* scripts/plot/legend.m: Demo #11, use 'h' for returned handle.
* scripts/plot/plot.m: Fix typo "lenths" -> "lengths".
* scripts/plot/ribbon.m: Remove unnecessary call to meshgrid now
that sombrero returns meshgridded data.
* scripts/plot/trimesh.m: Set colormap so plot is always reproducible.
author | Rik <rik@octave.org> |
---|---|
date | Tue, 01 Oct 2013 15:39:20 -0700 |
parents | 6e39fe7992d9 |
children | d63878346099 |
line wrap: on
line source
/* Copyright (C) 2010 Martin Hepperle This file is part of Octave. Octave is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. Octave is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Octave; see the file COPYING. If not, see <http://www.gnu.org/licenses/>. */ // A primitive TeX character translator. Provides methods to translate // a subset of TeX symbol strings into their aequivalent Unicode // representation. // // Note that not all Unicode character sets contain all these characters. // Suitable Windows fonts are e.g.: // - Lucida Sans Unicode // - Arial Unicode MS // - MS Mincho package org.octave; public class TeXtranslator { private TeXcode m_texTable[] = { // lower case new TeXcode ("alpha", '\u03B1'), new TeXcode ("beta", '\u03B2'), new TeXcode ("gamma", '\u03B3'), new TeXcode ("delta", '\u03B4'), new TeXcode ("epsilon", '\u03B5'), new TeXcode ("zeta", '\u03B6'), new TeXcode ("eta", '\u03B7'), new TeXcode ("theta", '\u03B8'), new TeXcode ("vartheta", '\u03D1'), new TeXcode ("iota", '\u03B9'), new TeXcode ("kappa", '\u03BA'), new TeXcode ("lambda", '\u03BB'), new TeXcode ("mu", '\u03BC'), new TeXcode ("nu", '\u03BD'), new TeXcode ("xi", '\u03BE'), new TeXcode ("pi", '\u03C0'), new TeXcode ("rho", '\u03C1'), new TeXcode ("sigma", '\u03C3'), new TeXcode ("varsigma", '\u03C2'), new TeXcode ("tau", '\u03C4'), new TeXcode ("phi", '\u03C6'), new TeXcode ("chi", '\u03C7'), new TeXcode ("psi", '\u03C8'), new TeXcode ("omega", '\u03C9'), new TeXcode ("upsilon", '\u03C5'), // upper case new TeXcode ("Gamma", '\u0393'), new TeXcode ("Delta", '\u0394'), new TeXcode ("Theta", '\u0398'), new TeXcode ("Lambda", '\u039B'), new TeXcode ("Pi", '\u03A0'), new TeXcode ("Xi", '\u039E'), new TeXcode ("Sigma", '\u03A3'), new TeXcode ("Upsilon", '\u03A5'), new TeXcode ("Phi", '\u03A6'), new TeXcode ("Psi", '\u03A8'), new TeXcode ("Omega", '\u03A9'), // complex new TeXcode ("Im", '\u2111'), new TeXcode ("Re", '\u211c'), // special new TeXcode ("leq", '\u2264'), new TeXcode ("geq", '\u2265'), new TeXcode ("neq", '\u2260'), new TeXcode ("pm", '\u00B1'), new TeXcode ("infty", '\u221E'), new TeXcode ("partial", '\u2202'), new TeXcode ("approx", '\u2248'), new TeXcode ("circ", '\u2218'), new TeXcode ("bullet", '\u2022'), new TeXcode ("times", '\u00D7'), new TeXcode ("sim", '\u007E'), new TeXcode ("nabla", '\u2207'), new TeXcode ("ldots", '\u2026'), new TeXcode ("exists", '\u2203'), new TeXcode ("neg", '\u00AC'), new TeXcode ("aleph", '\u2135'), new TeXcode ("forall", '\u2200'), new TeXcode ("cong", '\u2245'), new TeXcode ("wp", '\u2118'), new TeXcode ("propto", '\u221D'), new TeXcode ("otimes", '\u2297'), new TeXcode ("oplus", '\u2295'), new TeXcode ("oslash", '\u2298'), new TeXcode ("cap", '\u2229'), new TeXcode ("cup", '\u222A'), new TeXcode ("ni", '\u220B'), new TeXcode ("in", '\u2208'), new TeXcode ("div", '\u00F7'), new TeXcode ("equiv", '\u2261'), new TeXcode ("int", '\u222B'), new TeXcode ("perp", '\u22A5'), new TeXcode ("wedge", '\u2227'), new TeXcode ("vee", '\u2228'), // sets new TeXcode ("supseteq", '\u2287'), new TeXcode ("supset", '\u2283'), new TeXcode ("subseteq", '\u2286'), new TeXcode ("subset", '\u2282'), // cards new TeXcode ("clubsuit", '\u2663'), new TeXcode ("spadesuit", '\u2660'), new TeXcode ("heartsuit", '\u2665'), new TeXcode ("diamondsuit", '\u2666'), new TeXcode ("copyright", '\u00A9'), // arrows new TeXcode ("leftarrow", '\u2190'), new TeXcode ("uparrow", '\u2191'), new TeXcode ("rightarrow", '\u2192'), new TeXcode ("downarrow", '\u2193'), new TeXcode ("leftrightarrow", '\u2194'), new TeXcode ("updownarrow", '\u2195'), }; public TeXtranslator () { /* DEBUG: output table to file try { java.io.PrintWriter pwTeX = new java.io.PrintWriter ("z:/tex.txt", "UTF-8"); java.io.PrintWriter pwHTML = new java.io.PrintWriter ("z:/html.txt", "UTF-8"); java.io.PrintWriter pwOctave = new java.io.PrintWriter ("z:/octave.txt", "UTF-8"); pwOctave.print ("msgbox ( ["); int i = 0; for (int k = 0; k < m_texTable.length; k++) { if (i++ == 0) { pwTeX.print ("@item "); pwHTML.print ("@item "); pwOctave.print (" '"); } else { pwTeX.print ("@tab "); pwHTML.print ("@tab "); pwOctave.print (" "); } pwTeX.println ("\\" + m_texTable[k].tex); pwTeX.println ("@tab '@math{\\" + m_texTable[k].tex + "}'"); pwHTML.println ("\\" + m_texTable[k].tex); pwHTML.println ("@tab '" + m_texTable[k].ucode + "'"); pwOctave.print ("\\\\" + m_texTable[k].tex+" "); pwOctave.print (" = ''\\" + m_texTable[k].tex + " ''"); if (i == 3) { pwTeX.println ("@c ----------"); pwHTML.println ("@c ----------"); pwOctave.println ("', 10, ..."); i=0; } else { pwTeX.println ("@tab"); pwHTML.println ("@tab"); pwOctave.print (" "); } } pwOctave.print ("']);"); pwTeX.close (); pwHTML.close (); pwOctave.close (); } catch (Exception e) { ; } /* */ } /* NOT YET TRANSLATED o rfloor lceil lfloor cdot prime 0 rceil surd mid varpi langle rangle */ public String replace (String s) { StringBuffer sb = new StringBuffer (s); // append trailing blank sb.append (' '); int i = 0; do { // 26 08 2010 MH szatt search at index i i = sb.indexOf ("\\", i); if (i > -1) { int j = sb.indexOf (" ", i); if (j > i) { String token = sb.substring (i + 1, j); for (int k = 0; k < m_texTable.length; k++) { if (m_texTable[k].tex.equals (token)) { sb.replace (i, j + 1, Character.toString (m_texTable[k].ucode)); break; } } if (sb.charAt (i) == '\\') { // backslash sztill there: not found if (sb.charAt (i + 1) == 'n') { // newline sb.replace (i, i + 2, "\n"); } else if (sb.charAt (i + 1) == '\\') { // backslash sb.replace (i, i + 2, "\\"); } } // 26 08 2010 MH // advance i to avoid deadlock in case of incorrect escape // sequences like \\\\alpha (double backslash) or // \\bogus (unknown escape sequence) i++; } } } while (i > -1); // finall: remove trailing blank return (sb.substring (0, sb.length () - 1).toString ()); } }