/*
* Copyright (C) 2015-2017 たんらる
*/
package fourthline.mmlTools.optimizer;
import fourthline.mmlTools.core.MMLTokenizer;
/**
* MMLEventListで出力したMMLに対して最適化を行う.
*/
public final class MMLStringOptimizer {
private static boolean debug = false;
/** 最適化処理をスキップするオプション */
private static boolean optSkip = false;
public static void setOptSkip(boolean optSkip) {
MMLStringOptimizer.optSkip = optSkip;
}
public static void setDebug(boolean b) {
debug = b;
}
public static boolean getDebug() {
return debug;
}
private String originalMML;
/**
* @param mml MMLEventListで出力したMML文字列.
*/
public MMLStringOptimizer(String mml) {
originalMML = mml;
}
@Override
public String toString() {
return getOptimizedString();
}
private String getOptimizedString() {
return optimize();
}
private String optimize() {
String mml = originalMML;
if (MMLStringOptimizer.optSkip) {
return mml;
}
Optimizer optimizerList[] = {
new OxLxOptimizer(),
new BpCmOptimizer(),
new NxOptimizer()
};
for (Optimizer optimizer : optimizerList) {
MMLTokenizer tokenizer = new MMLTokenizer(mml);
while (tokenizer.hasNext()) {
String token = tokenizer.next();
optimizer.nextToken(token);
}
mml = optimizer.getMinString();
}
return mml;
}
interface Optimizer {
public void nextToken(String token);
public String getMinString();
}
public static void main(String args[]) {
MMLStringOptimizer.setDebug(true);
String mml = "c8c2c1c8c2c1c8c2c1c8c2c1";
System.out.println( new MMLStringOptimizer(mml).toString() );
}
}