| 163 | } |
| 164 | |
| 165 | fn resolve_name(name: &str, names: &[(String, usize)]) -> Result<usize, ReError> { |
| 166 | if !name.is_empty() && name.chars().all(|c| c.is_ascii_digit()) { |
| 167 | return name.parse::<usize>().map_err(|_| ReError::Syntax(String::from("bad group number"))); |
| 168 | } |
| 169 | names.iter().find(|(nm, _)| nm == name).map(|(_, ix)| *ix).ok_or(ReError::Syntax(String::from("unknown group name"))) |
| 170 | } |
| 171 | |
| 172 | fn push_group(idx: usize, chars: &[char], caps: &Caps, out: &mut String) { |
| 173 | if let Some((s, e)) = caps.get(idx).copied().flatten() { |