2727import java .util .Locale ;
2828import java .util .Map ;
2929import java .util .Set ;
30+ import java .util .TreeSet ;
3031
3132/**
3233 * <p>
@@ -61,7 +62,7 @@ private PhonemeBuilder(Set<Rule.Phoneme> phonemes) {
6162 this .phonemes = phonemes ;
6263 }
6364
64- public PhonemeBuilder append (String str ) {
65+ public PhonemeBuilder append (CharSequence str ) {
6566 Set <Rule .Phoneme > newPhonemes = new HashSet <Rule .Phoneme >();
6667
6768 for (Rule .Phoneme ph : this .phonemes ) {
@@ -91,19 +92,14 @@ public Set<Rule.Phoneme> getPhonemes() {
9192 }
9293
9394 public String makeString () {
94- List <String > sorted = new ArrayList <String >();
9595
96- for (Rule .Phoneme ph : this .phonemes ) {
97- sorted .add (ph .getPhonemeText ());
98- }
99-
100- Collections .sort (sorted );
10196 StringBuilder sb = new StringBuilder ();
97+ // System.err.println(this.phonemes.getClass());
10298
103- for (String ph : sorted ) {
99+ for (Rule . Phoneme ph : this . phonemes ) {
104100 if (sb .length () > 0 )
105101 sb .append ("|" );
106- sb .append (ph );
102+ sb .append (ph . getPhonemeText () );
107103 }
108104
109105 return sb .toString ();
@@ -112,13 +108,13 @@ public String makeString() {
112108
113109 private static class RulesApplication {
114110 private final List <Rule > finalRules ;
115- private final String input ;
111+ private final CharSequence input ;
116112
117113 private PhonemeBuilder phonemeBuilder ;
118114 private int i ;
119115 private boolean found ;
120116
121- public RulesApplication (List <Rule > finalRules , String input , PhonemeBuilder phonemeBuilder , int i ) {
117+ public RulesApplication (List <Rule > finalRules , CharSequence input , PhonemeBuilder phonemeBuilder , int i ) {
122118 if (finalRules == null ) {
123119 throw new NullPointerException ("The finalRules argument must not be null" );
124120 }
@@ -227,11 +223,11 @@ private PhonemeBuilder applyFinalRules(PhonemeBuilder phonemeBuilder, List<Rule>
227223 return phonemeBuilder ;
228224 }
229225
230- Set <Rule .Phoneme > phonemes = new HashSet <Rule .Phoneme >();
226+ Set <Rule .Phoneme > phonemes = new TreeSet <Rule .Phoneme >();
231227
232228 for (Rule .Phoneme phoneme : phonemeBuilder .getPhonemes ()) {
233229 PhonemeBuilder subBuilder = PhonemeBuilder .empty (phoneme .getLanguages ());
234- String phonemeText = phoneme .getPhonemeText ();
230+ CharSequence phonemeText = phoneme .getPhonemeText ();
235231 // System.err.println("Expanding: " + phonemeText);
236232
237233 for (int i = 0 ; i < phonemeText .length ();) {
@@ -241,7 +237,7 @@ private PhonemeBuilder applyFinalRules(PhonemeBuilder phonemeBuilder, List<Rule>
241237
242238 if (!found ) {
243239 // System.err.println("Not found. Appending as-is");
244- subBuilder = subBuilder .append (phonemeText .substring (i , i + 1 ));
240+ subBuilder = subBuilder .append (phonemeText .subSequence (i , i + 1 ));
245241 }
246242
247243 i = rulesApplication .getI ();
@@ -331,14 +327,14 @@ public String phoneticUtf8(String input, final Languages.LanguageSet languageSet
331327 // check for any prefix in the words list
332328 String remainder = input .substring (l .length () + 1 ); // input without the prefix
333329 String combined = l + remainder ; // input with prefix without space
334- return encode (remainder ) + "- " + encode (combined );
330+ return "(" + encode (remainder ) + ")-( " + encode (combined ) + ")" ;
335331 }
336332 // fixme: this case is invariant on l
337333 else if (input .length () >= 2 && input .substring (0 , 2 ).equals ("d'" )) // check for d'
338334 {
339335 String remainder = input .substring (2 );
340336 String combined = "d" + remainder ;
341- return encode (remainder ) + "- " + encode (combined );
337+ return "(" + encode (remainder ) + ")-( " + encode (combined ) + ")" ;
342338 }
343339 }
344340 }
0 commit comments