Skip to content

Commit f0d3786

Browse files
committed
Add support for writing all 3 types of code blocks as commands
1 parent cee5e10 commit f0d3786

File tree

2 files changed

+62
-10
lines changed

2 files changed

+62
-10
lines changed

src/commands.rs

Lines changed: 51 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,18 +47,32 @@ impl Commands {
4747
state = add_space(&mut self.state_machine, state, i);
4848
state = add_quoted_dynamic_segment(&mut self.state_machine, state);
4949
param_names.push(&segment[1..segment.len() - 1]);
50+
51+
} else if segment.starts_with("```rust\n") && segment.ends_with("\n```") {
52+
state = add_space(&mut self.state_machine, state, i);
53+
state = add_code_segment1(&mut self.state_machine, state);
54+
param_names.push(&segment[8..segment.len() - 4]);
55+
5056
} else if segment.starts_with("```") && segment.ends_with("```") {
5157
state = add_space(&mut self.state_machine, state, i);
52-
state = add_triple_tick_code_segment(&mut self.state_machine, state);
58+
state = add_code_segment2(&mut self.state_machine, state);
5359
param_names.push(&segment[3..segment.len() - 3]);
60+
61+
} else if segment.starts_with("`") && segment.ends_with("`") {
62+
state = add_space(&mut self.state_machine, state, i);
63+
state = add_code_segment3(&mut self.state_machine, state);
64+
param_names.push(&segment[1..segment.len() - 1]);
65+
5466
} else if segment.starts_with("{") && segment.ends_with("}") {
5567
state = add_space(&mut self.state_machine, state, i);
5668
state = add_dynamic_segment(&mut self.state_machine, state);
5769
param_names.push(&segment[1..segment.len() - 1]);
70+
5871
} else if segment.ends_with("...") {
5972
state = add_space(&mut self.state_machine, state, i);
6073
state = add_remaining_segment(&mut self.state_machine, state);
6174
param_names.push(&segment[..segment.len() - 3]);
75+
6276
} else {
6377
state = add_space(&mut self.state_machine, state, i);
6478
segment.chars().for_each(|ch| {
@@ -145,7 +159,30 @@ fn add_quoted_dynamic_segment(state_machine: &mut StateMachine, mut state: usize
145159
}
146160

147161
#[inline]
148-
fn add_triple_tick_code_segment(state_machine: &mut StateMachine, mut state: usize) -> usize {
162+
fn add_code_segment1(state_machine: &mut StateMachine, mut state: usize) -> usize {
163+
state = state_machine.add(state, CharacterSet::from_char('`'));
164+
state = state_machine.add(state, CharacterSet::from_char('`'));
165+
state = state_machine.add(state, CharacterSet::from_char('`'));
166+
state = state_machine.add(state, CharacterSet::from_char('r'));
167+
state = state_machine.add(state, CharacterSet::from_char('u'));
168+
state = state_machine.add(state, CharacterSet::from_char('s'));
169+
state = state_machine.add(state, CharacterSet::from_char('t'));
170+
state = state_machine.add(state, CharacterSet::from_char('\n'));
171+
state = state_machine.add(state, CharacterSet::any());
172+
state_machine.add_next_state(state, state);
173+
state_machine.start_parse(state);
174+
state_machine.end_parse(state);
175+
state = state_machine.add(state, CharacterSet::from_char('\n'));
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::from_char('`'));
179+
180+
state
181+
}
182+
183+
184+
#[inline]
185+
fn add_code_segment2(state_machine: &mut StateMachine, mut state: usize) -> usize {
149186
state = state_machine.add(state, CharacterSet::from_char('`'));
150187
state = state_machine.add(state, CharacterSet::from_char('`'));
151188
state = state_machine.add(state, CharacterSet::from_char('`'));
@@ -159,3 +196,15 @@ fn add_triple_tick_code_segment(state_machine: &mut StateMachine, mut state: usi
159196

160197
state
161198
}
199+
200+
#[inline]
201+
fn add_code_segment3(state_machine: &mut StateMachine, mut state: usize) -> usize {
202+
state = state_machine.add(state, CharacterSet::from_char('`'));
203+
state = state_machine.add(state, CharacterSet::any());
204+
state_machine.add_next_state(state, state);
205+
state_machine.start_parse(state);
206+
state_machine.end_parse(state);
207+
state = state_machine.add(state, CharacterSet::from_char('`'));
208+
209+
state
210+
}

src/main.rs

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -86,15 +86,18 @@ fn app() -> Result {
8686

8787
let mut cmds = Commands::new();
8888

89+
cmds.add("?play ```rust\ncode\n```", |args: Args| {
90+
let input = dbg!(args.params.get("code").unwrap());
91+
Ok(())
92+
});
93+
8994
cmds.add("?play ```code```", |args: Args| {
90-
let input = args.params.get("code").unwrap();
91-
let code = if input.starts_with("rust\n") && input.ends_with("\n") {
92-
&input[5..input.len()-1]
93-
} else {
94-
&input
95-
};
96-
97-
dbg!(code);
95+
let input = dbg!(args.params.get("code").unwrap());
96+
Ok(())
97+
});
98+
99+
cmds.add("?play `code`", |args: Args| {
100+
let input = dbg!(args.params.get("code").unwrap());
98101
Ok(())
99102
});
100103

0 commit comments

Comments
 (0)