diff scripts/java/org/octave/TeXtranslator.java @ 15625:acf0addfc610

include Octave Forge java package in core Octave * scripts/java: New directory tree. * scripts/Makefile.am: Include java/module.mk. (JAR_FILES): New variable. (nobase_fcnfile_DATA): Include $(JAR_FILES) in the list. (all-local): Depend on $(JAR_FILES). (java/PKG_ADD, java_GEN_FCN_FILES, java/$(octave_dirstamp)): New rules. * libinterp/link-deps (LIBOCTINTERP_LINK_DEP): Include $(JAVA_LIBS) in the list. * dldfcn/__java__.h, dldfcn/__java__.cc: New files. * dldfcn/module-files (__java__.cc): New file description. * doc/interpreter/java.txi: New file. * doc/interpreter/octave.texi: Include java.texi. * doc/interpreter/java-images: New directory. * doc/interpreter/Makefile.am (JAVA_IMAGES): New variable. (IMAGES): Include $(JAVA_IMAGSES) in the list. (MUNGED_TEXI_SRC): Include java.texi in the list. * configure.ac: Check for Java libraries and tools. Include Java info in the summary message. * build-aux/common.mk (JAVA_CPPFLAGS, JAVA_LIBS): New variables. * NEWS: Update. * contributors.in: Include Martin Hepperle in the list.
author John W. Eaton <jwe@octave.org>
date Fri, 23 Nov 2012 15:29:13 -0500
parents
children 6e39fe7992d9
line wrap: on
line diff
new file mode 100755
--- /dev/null
+++ b/scripts/java/org/octave/TeXtranslator.java
@@ -0,0 +1,264 @@
+/**
+ *
+ * This program 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 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 this program; 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.:<br>
+ * - Lucida Sans Unicode<br>
+ * - Arial Unicode MS<br>
+ * - MS Mincho<br>
+ *
+ * <p>Copyright (c) 2010 Martin Hepperle</p>
+ *
+ * @author Martin Hepperle
+ * @version 1.0
+ */
+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 () );
+   }
+}