Skip to content

Commit cee5e10

Browse files
committed
Hack together a series of states that accepts ?play
1 parent af50eed commit cee5e10

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

src/commands.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@ 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+
} else if segment.starts_with("```") && segment.ends_with("```") {
51+
state = add_space(&mut self.state_machine, state, i);
52+
state = add_triple_tick_code_segment(&mut self.state_machine, state);
53+
param_names.push(&segment[3..segment.len() - 3]);
5054
} else if segment.starts_with("{") && segment.ends_with("}") {
5155
state = add_space(&mut self.state_machine, state, i);
5256
state = add_dynamic_segment(&mut self.state_machine, state);
@@ -139,3 +143,19 @@ fn add_quoted_dynamic_segment(state_machine: &mut StateMachine, mut state: usize
139143

140144
state
141145
}
146+
147+
#[inline]
148+
fn add_triple_tick_code_segment(state_machine: &mut StateMachine, mut state: usize) -> usize {
149+
state = state_machine.add(state, CharacterSet::from_char('`'));
150+
state = state_machine.add(state, CharacterSet::from_char('`'));
151+
state = state_machine.add(state, CharacterSet::from_char('`'));
152+
state = state_machine.add(state, CharacterSet::any());
153+
state_machine.add_next_state(state, state);
154+
state_machine.start_parse(state);
155+
state_machine.end_parse(state);
156+
state = state_machine.add(state, CharacterSet::from_char('`'));
157+
state = state_machine.add(state, CharacterSet::from_char('`'));
158+
state = state_machine.add(state, CharacterSet::from_char('`'));
159+
160+
state
161+
}

src/main.rs

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

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

89+
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);
98+
Ok(())
99+
});
100+
89101
if config.tags {
90102
// Tags
91103
cmds.add("?tags delete {key}", tags::delete);

0 commit comments

Comments
 (0)