File tree Expand file tree Collapse file tree 2 files changed +29
-2
lines changed Expand file tree Collapse file tree 2 files changed +29
-2
lines changed Original file line number Diff line number Diff line change @@ -805,4 +805,21 @@ mod tests {
805805 assert_eq ! ( table. translate( "afoo" ) , "⠁⠄⠈⠈" ) ;
806806 assert_eq ! ( table. translate( "afoob" ) , "⠁⠉⠂" ) ;
807807 }
808+
809+ #[ test]
810+ fn match_with_any_test ( ) {
811+ let rules = vec ! [
812+ parse_rule( "lowercase a 1" ) ,
813+ parse_rule( "lowercase b 2" ) ,
814+ parse_rule( "lowercase f 3" ) ,
815+ parse_rule( "lowercase o 4" ) ,
816+ parse_rule( "lowercase r 5" ) ,
817+ parse_rule( "match . foo b 14" ) ,
818+ ] ;
819+ let table = TranslationTable :: compile ( rules, Direction :: Forward ) . unwrap ( ) ;
820+ assert_eq ! ( table. translate( "foo" ) , "⠄⠈⠈" ) ;
821+ assert_eq ! ( table. translate( "afoo" ) , "⠁⠄⠈⠈" ) ;
822+ assert_eq ! ( table. translate( "afoob" ) , "⠁⠉⠂" ) ;
823+ assert_eq ! ( table. translate( "ffoob" ) , "⠄⠉⠂" ) ;
824+ }
808825}
Original file line number Diff line number Diff line change @@ -47,6 +47,9 @@ impl TrieNode {
4747 let lowercase = c. to_lowercase ( ) . next ( ) . unwrap ( ) ;
4848 self . char_transition ( lowercase)
4949 }
50+ fn any_transition ( & self ) -> Option < & TrieNode > {
51+ self . transitions . get ( & Transition :: Any )
52+ }
5053 fn word_start_transition ( & self ) -> Option < & TrieNode > {
5154 self . transitions . get ( & Transition :: Start ( Boundary :: Word ) )
5255 }
@@ -237,15 +240,22 @@ impl Trie {
237240 match_length + 1 ,
238241 offset,
239242 ) ) ;
240- }
241- if let Some ( node) = node. char_case_insensitive_transition ( c) {
243+ } else if let Some ( node) = node. char_case_insensitive_transition ( c) {
242244 matching_rules. extend ( self . find_translations_from_node (
243245 & input[ bytes..] ,
244246 Some ( c) ,
245247 node,
246248 match_length + 1 ,
247249 offset,
248250 ) ) ;
251+ } else if let Some ( node) = node. any_transition ( ) {
252+ matching_rules. extend ( self . find_translations_from_node (
253+ & input[ bytes..] ,
254+ Some ( c) ,
255+ node,
256+ match_length + 1 ,
257+ offset,
258+ ) ) ;
249259 }
250260 }
251261 if let Some ( node) = node. word_start_transition ( ) {
You can’t perform that action at this time.
0 commit comments