/*
* Copyright (C) 2006-2016 INRIA and contributors
* Spoon - http://spoon.gforge.inria.fr/
*
* This software is governed by the CeCILL-C License under French law and abiding by the rules of distribution of free software. You can use, modify and/or redistribute the software under the terms of the CeCILL-C license as circulated by CEA, CNRS and INRIA at http://www.cecill.info.
*
* 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 CeCILL-C License for more details.
*
* The fact that you are presently reading this means that you have had knowledge of the CeCILL-C license and that you accept its terms.
*/
package spoon.test.prettyprinter.testclasses;
import java.util.*;
/**
* Created by urli on 19/12/2016.
*/
public class Rule {
public enum Language {
DTD, WSDL, OTHER
}
public static final class Phoneme implements PhonemeExpr {
public interface Bidule {}
public static final Comparator<Phoneme> COMPARATOR = new Comparator<Phoneme>() {
@Override
public int compare(final Phoneme o1, final Phoneme o2) {
for (int i = 0; i < o1.phonemeText.length(); i++) {
if (i >= o2.phonemeText.length()) {
return +1;
}
final int c = o1.phonemeText.charAt(i) - o2.phonemeText.charAt(i);
if (c != 0) {
return c;
}
}
if (o1.phonemeText.length() < o2.phonemeText.length()) {
return -1;
}
return 0;
}
};
private final StringBuilder phonemeText;
private final Language language;
public Phoneme(final CharSequence phonemeText, final Language language) {
this.phonemeText = new StringBuilder(phonemeText);
this.language = language;
}
@Override
public Iterable<Phoneme> getPhonemes() {
return Collections.singleton(this);
}
}
public interface PhonemeExpr {
Iterable<Phoneme> getPhonemes();
}
public static final class PhonemeList implements PhonemeExpr {
private final List<Phoneme> phonemes;
public PhonemeList(final List<Phoneme> phonemes) {
this.phonemes = phonemes;
}
@Override
public List<Phoneme> getPhonemes() {
return this.phonemes;
}
}
public static final String ALL = "ALL";
private static final String DOUBLE_QUOTE = "\"";
private static final String HASH_INCLUDE = "#include";
private static Phoneme parsePhoneme(final String ph) {
final int open = ph.indexOf("[");
if (open >= 0) {
if (!ph.endsWith("]")) {
throw new IllegalArgumentException("Phoneme expression contains a '[' but does not end in ']'");
}
final String before = ph.substring(0, open);
final String in = ph.substring(open + 1, ph.length() - 1);
final Set<String> langs = new HashSet<String>(Arrays.asList(in.split("[+]")));
return new Phoneme(before, Language.DTD);
}
return new Phoneme(ph, Language.WSDL);
}
}