Poly2tex.java

/*
 * $Id: Poly2tex.java,v 1.4 2008/02/25 08:35:51 koga Exp $
 * 
 * Copyright (C) 2004 Koga Laboratory. All rights reserved.
 */
package org.mklab.tool.matrix;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

import org.mklab.nfc.scalar.DoublePolynomial;


/**
 * 多項式をTeX形式でファイルに保存するクラスです。
 * 
 * <p> Save a polynomial to a file in tex-form
 * 
 * @author koga
 * @version $Revision: 1.4 $
 * @see org.mklab.tool.matrix.Mat2tex
 * @see org.mklab.tool.matrix.Rat2tex
 */
public class Poly2tex {

  /**
   * @param p 多項式
   * @param file ファイル名
   * @throws IOException 出力できない場合
   */
  public static void poly2tex(DoublePolynomial p, String file) throws IOException {
    try (PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file)))) {
      pw.print(poly2texf(p));
    }
  }

  /**
   * @param p 多項式
   * @param file ファイル名
   * @param var_name 変数名
   * @throws IOException 出力できない場合
   */
  public static void poly2tex(DoublePolynomial p, String file, String var_name) throws IOException {
    try (PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file)))) {
      pw.print(poly2texf(p, var_name));
    }
  }

  /**
   * @param p 多項式
   * @return TeX形式の文字列
   */
  public static String poly2texf(DoublePolynomial p) {
    String var_name = "s"; //$NON-NLS-1$
    return poly2texf(p, var_name);
  }

  /**
   * @param p 多項式
   * @param var_name 変数名
   * @return TeX形式の文字列
   */
  public static String poly2texf(DoublePolynomial p, String var_name) {
    String tex = p.toString();
    if (!var_name.equals("s")) { //$NON-NLS-1$
      int i;
      while ((i = tex.indexOf('s')) > 0) {
        if (tex.length() == 1) {
          tex = var_name;
        } else if (i == tex.length()) {
          tex = tex.substring(1, i - 1) + var_name;
        } else if (i == 1) {
          tex = var_name + tex.substring(i + 1, tex.length());
        } else {
          tex = tex.substring(1, i - 1) + var_name + tex.subSequence(i + 1, tex.length());
        }
      }
    }
    return tex;
  }

}