/*
JMeld is a visual diff and merge tool.
Copyright (C) 2007 Kees Kuip
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301 USA
*/
package org.jmeld.util;
import org.jmeld.settings.JMeldSettings;
import org.jmeld.ui.util.TypeTokenizerManager;
import org.jmeld.util.conf.ConfigurationListenerIF;
public class TokenizerFactory implements ConfigurationListenerIF {
private static TokenizerFactory instance;
private Tokenizer innerDiffTokenizer;
private Tokenizer fileNameTokenizer;
public static TokenizerFactory getInstance() {
if (instance == null) {
instance = new TokenizerFactory();
}
return instance;
}
private TokenizerFactory() {
JMeldSettings.getInstance().addConfigurationListener(this);
}
public synchronized Tokenizer getInnerDiffTokenizer() {
if (innerDiffTokenizer == null) {
Tokenizer innerDiffTokenizer;
String tokenizerName = JMeldSettings.getInstance().getEditor().getTypeTokenizerName();
if (TypeTokenizerManager.CHAR_TOKENIZER.equals(tokenizerName)) {
innerDiffTokenizer = new WordTokenizer(".");
} else if (TypeTokenizerManager.WORD_TOKENIZER.equals(tokenizerName)) {
innerDiffTokenizer = new WordTokenizer("\\b\\B*");
} else if (TypeTokenizerManager.NONWORD_TOKENIZER.equals(tokenizerName)) {
innerDiffTokenizer = new WordTokenizer("\\s|;|:|\\(|\\)|\\[|\\]|[-+*&^%\\/}{=<>`'\"|]+|\\.");
} else {
//TODO: Unknown
innerDiffTokenizer = null;
}
setInnerDiffTokenizer(innerDiffTokenizer);
}
return innerDiffTokenizer;
}
public synchronized Tokenizer getFileNameTokenizer() {
if (fileNameTokenizer == null) {
setFileNameTokenizer(new WordTokenizer("[ /\\\\]+"));
}
return fileNameTokenizer;
}
private void setInnerDiffTokenizer(Tokenizer innerDiffTokenizer) {
this.innerDiffTokenizer = innerDiffTokenizer;
}
private void setFileNameTokenizer(Tokenizer fileNameTokenizer) {
this.fileNameTokenizer = fileNameTokenizer;
}
@Override
public void configurationChanged() {
setInnerDiffTokenizer(null);
setFileNameTokenizer(null);
}
}