view 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 source

/**
 *
 * 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 () );
   }
}