summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Cargo.lock2
-rw-r--r--Cargo.toml2
-rw-r--r--src/highlighter.rs32
3 files changed, 21 insertions, 15 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 5e29055..6cd124d 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -39,7 +39,7 @@ dependencies = [
[[package]]
name = "highlight"
-version = "1.0.0"
+version = "1.0.2"
dependencies = [
"fancy-regex",
]
diff --git a/Cargo.toml b/Cargo.toml
index ff860ff..5669f4f 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "highlight"
-version = "1.0.0"
+version = "1.0.2"
edition = "2024"
[dependencies]
diff --git a/src/highlighter.rs b/src/highlighter.rs
index 40e618e..fe40160 100644
--- a/src/highlighter.rs
+++ b/src/highlighter.rs
@@ -105,22 +105,28 @@ impl Highlighter {
fn replace_variables(pattern: &str, variables: &HashMap<String, String>) -> String {
let mut output = String::new();
- let mut chars = pattern.chars();
- while let Some(c) = chars.next() {
- if c == '<' {
- let mut name = String::from('<');
- loop {
- match chars.next() {
- Some('>') => { name.push('>'); break; }
- Some(c) => name.push(c),
- None => panic!("Missing '>' character"),
+ let chars: Vec<char> = pattern.chars().collect();
+ let mut i = 0;
+ 'outer: while let Some(c) = chars.get(i) {
+ if *c == '<' {
+ let mut name = String::from(*c);
+ let mut j = i+1;
+ while let Some(d) = chars.get(j) {
+ name.push(*d);
+ if *d == '>' {
+ let pattern = variables.get(&name).expect(&format!("Missing definition for {name:?}"));
+ output.push_str(&format!("(?:{pattern})"));
+ i = j+1;
+ continue 'outer;
}
+ if !d.is_lowercase() && *d != '-' {
+ break;
+ }
+ j += 1;
}
- let pattern = variables.get(&name).expect(&format!("Missing definition for {name:?}"));
- output.push_str(&format!("(?:{pattern})"));
- } else {
- output.push(c);
}
+ output.push(*c);
+ i += 1;
}
return output;
}