@@ -68,6 +68,11 @@ impl Commands {
6868 let mut opt_lambda_state = None ;
6969 let mut opt_final_states = vec ! [ ] ;
7070
71+ let handler = Arc :: new ( Command {
72+ guard,
73+ ptr : Box :: new ( handler) ,
74+ } ) ;
75+
7176 command
7277 . split ( ' ' )
7378 . filter ( |segment| segment. len ( ) > 0 )
@@ -90,18 +95,25 @@ impl Commands {
9095 } else {
9196 opt_lambda_state = None ;
9297 opt_final_states. truncate ( 0 ) ;
98+ let last_state = state;
9399 state = self . add_space ( state, i) ;
94100
95101 if segment. starts_with ( "```\n " ) && segment. ends_with ( "```" ) {
96102 state = self . add_code_segment_multi_line ( state, segment) ;
97103 } else if segment. starts_with ( "```" ) && segment. ends_with ( "```" ) {
98- state = self . add_code_segment_single_line ( state, 3 , segment ) ;
104+ state = self . add_code_segment_single_line ( state, segment , 3 ) ;
99105 } else if segment. starts_with ( '`' ) && segment. ends_with ( '`' ) {
100- state = self . add_code_segment_single_line ( state, 1 , segment ) ;
106+ state = self . add_code_segment_single_line ( state, segment , 1 ) ;
101107 } else if segment. starts_with ( '{' ) && segment. ends_with ( '}' ) {
102108 state = self . add_dynamic_segment ( state, segment) ;
103109 } else if segment. ends_with ( "..." ) {
104- state = self . add_remaining_segment ( state, segment) ;
110+ if segment == "..." {
111+ self . state_machine . set_final_state ( last_state) ;
112+ self . state_machine . set_handler ( last_state, handler. clone ( ) ) ;
113+ state = self . add_unnamed_remaining_segment ( last_state) ;
114+ } else {
115+ state = self . add_remaining_segment ( state, segment) ;
116+ }
105117 } else {
106118 segment. chars ( ) . for_each ( |ch| {
107119 state = self . state_machine . add ( state, CharacterSet :: from_char ( ch) )
@@ -110,11 +122,6 @@ impl Commands {
110122 }
111123 } ) ;
112124
113- let handler = Arc :: new ( Command {
114- guard,
115- ptr : Box :: new ( handler) ,
116- } ) ;
117-
118125 if opt_lambda_state. is_some ( ) {
119126 opt_final_states. iter ( ) . for_each ( |state| {
120127 self . state_machine . set_final_state ( * state) ;
@@ -246,6 +253,14 @@ impl Commands {
246253 state
247254 }
248255
256+ fn add_unnamed_remaining_segment ( & mut self , mut state : usize ) -> usize {
257+ let char_set = CharacterSet :: any ( ) ;
258+ state = self . state_machine . add ( state, char_set) ;
259+ self . state_machine . add_next_state ( state, state) ;
260+
261+ state
262+ }
263+
249264 fn add_code_segment_multi_line ( & mut self , mut state : usize , s : & ' static str ) -> usize {
250265 let name = & s[ 4 ..s. len ( ) - 3 ] ;
251266
@@ -279,8 +294,8 @@ impl Commands {
279294 fn add_code_segment_single_line (
280295 & mut self ,
281296 mut state : usize ,
282- n_backticks : usize ,
283297 s : & ' static str ,
298+ n_backticks : usize ,
284299 ) -> usize {
285300 use std:: iter:: repeat;
286301
0 commit comments