@@ -43,9 +43,17 @@ impl Commands {
43
43
. filter ( |segment| segment. len ( ) > 0 )
44
44
. enumerate ( )
45
45
. for_each ( |( i, segment) | {
46
- if segment. starts_with ( "[ " ) && segment. ends_with ( "] " ) {
46
+ if segment. starts_with ( "``` \n " ) && segment. ends_with ( "``` " ) {
47
47
state = add_space ( & mut self . state_machine , state, i) ;
48
- state = add_quoted_dynamic_segment ( & mut self . state_machine , state) ;
48
+ state = add_code_segment_multi_line ( & mut self . state_machine , state) ;
49
+ param_names. push ( & segment[ 4 ..segment. len ( ) - 3 ] ) ;
50
+ } else if segment. starts_with ( "```" ) && segment. ends_with ( "```" ) {
51
+ state = add_space ( & mut self . state_machine , state, i) ;
52
+ state = add_code_segment_single_line_long ( & mut self . state_machine , state) ;
53
+ param_names. push ( & segment[ 3 ..segment. len ( ) - 3 ] ) ;
54
+ } else if segment. starts_with ( "`" ) && segment. ends_with ( "`" ) {
55
+ state = add_space ( & mut self . state_machine , state, i) ;
56
+ state = add_code_segment_single_line_short ( & mut self . state_machine , state) ;
49
57
param_names. push ( & segment[ 1 ..segment. len ( ) - 1 ] ) ;
50
58
} else if segment. starts_with ( "{" ) && segment. ends_with ( "}" ) {
51
59
state = add_space ( & mut self . state_machine , state, i) ;
@@ -99,7 +107,10 @@ impl Commands {
99
107
#[ inline]
100
108
fn add_space ( state_machine : & mut StateMachine , mut state : usize , i : usize ) -> usize {
101
109
if i > 0 {
102
- state = state_machine. add ( state, CharacterSet :: from_char ( ' ' ) ) ;
110
+ let mut char_set = CharacterSet :: from_char ( ' ' ) ;
111
+ char_set. insert ( '\n' ) ;
112
+
113
+ state = state_machine. add ( state, char_set) ;
103
114
state_machine. add_next_state ( state, state) ;
104
115
}
105
116
state
@@ -129,13 +140,60 @@ fn add_remaining_segment(state_machine: &mut StateMachine, mut state: usize) ->
129
140
}
130
141
131
142
#[ inline]
132
- fn add_quoted_dynamic_segment ( state_machine : & mut StateMachine , mut state : usize ) -> usize {
133
- state = state_machine. add ( state, CharacterSet :: from_char ( '"' ) ) ;
143
+ fn add_code_segment_multi_line ( state_machine : & mut StateMachine , mut state : usize ) -> usize {
144
+ state = state_machine. add ( state, CharacterSet :: from_char ( '`' ) ) ;
145
+ state = state_machine. add ( state, CharacterSet :: from_char ( '`' ) ) ;
146
+ state = state_machine. add ( state, CharacterSet :: from_char ( '`' ) ) ;
147
+
148
+ let lambda = state;
149
+
150
+ let mut char_set = CharacterSet :: any ( ) ;
151
+ char_set. remove ( '`' ) ;
152
+ char_set. remove ( ' ' ) ;
153
+ char_set. remove ( '\n' ) ;
154
+ state = state_machine. add ( state, char_set) ;
155
+ state_machine. add_next_state ( state, state) ;
156
+
157
+ state = state_machine. add ( state, CharacterSet :: from_char ( '\n' ) ) ;
158
+
159
+ state_machine. add_next_state ( lambda, state) ;
160
+
161
+ state = state_machine. add ( state, CharacterSet :: any ( ) ) ;
162
+ state_machine. add_next_state ( state, state) ;
163
+ state_machine. start_parse ( state) ;
164
+ state_machine. end_parse ( state) ;
165
+
166
+ state = state_machine. add ( state, CharacterSet :: from_char ( '`' ) ) ;
167
+ state = state_machine. add ( state, CharacterSet :: from_char ( '`' ) ) ;
168
+ state = state_machine. add ( state, CharacterSet :: from_char ( '`' ) ) ;
169
+
170
+ state
171
+ }
172
+
173
+ #[ inline]
174
+ fn add_code_segment_single_line_long ( state_machine : & mut StateMachine , mut state : usize ) -> usize {
175
+ state = state_machine. add ( state, CharacterSet :: from_char ( '`' ) ) ;
176
+ state = state_machine. add ( state, CharacterSet :: from_char ( '`' ) ) ;
177
+ state = state_machine. add ( state, CharacterSet :: from_char ( '`' ) ) ;
178
+ state = state_machine. add ( state, CharacterSet :: any ( ) ) ;
179
+ state_machine. add_next_state ( state, state) ;
180
+ state_machine. start_parse ( state) ;
181
+ state_machine. end_parse ( state) ;
182
+ state = state_machine. add ( state, CharacterSet :: from_char ( '`' ) ) ;
183
+ state = state_machine. add ( state, CharacterSet :: from_char ( '`' ) ) ;
184
+ state = state_machine. add ( state, CharacterSet :: from_char ( '`' ) ) ;
185
+
186
+ state
187
+ }
188
+
189
+ #[ inline]
190
+ fn add_code_segment_single_line_short ( state_machine : & mut StateMachine , mut state : usize ) -> usize {
191
+ state = state_machine. add ( state, CharacterSet :: from_char ( '`' ) ) ;
134
192
state = state_machine. add ( state, CharacterSet :: any ( ) ) ;
135
193
state_machine. add_next_state ( state, state) ;
136
194
state_machine. start_parse ( state) ;
137
195
state_machine. end_parse ( state) ;
138
- state = state_machine. add ( state, CharacterSet :: from_char ( '" ' ) ) ;
196
+ state = state_machine. add ( state, CharacterSet :: from_char ( '` ' ) ) ;
139
197
140
198
state
141
199
}
0 commit comments