From 2b43e0c004b0daf16c009fc24cada8b4425f159c Mon Sep 17 00:00:00 2001 From: Klesti Selimaj Date: Tue, 19 May 2026 01:47:02 +0200 Subject: [PATCH] Working mapping --- parser/src/rev_mapper/grammar.pest | 6 ++++-- parser/src/rev_mapper/mod.rs | 19 ++++++++++++++++--- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/parser/src/rev_mapper/grammar.pest b/parser/src/rev_mapper/grammar.pest index bb8ca35..7ef6582 100644 --- a/parser/src/rev_mapper/grammar.pest +++ b/parser/src/rev_mapper/grammar.pest @@ -2,8 +2,10 @@ WHITESPACE = _{ " " | "\t" | "\r" | "\n" } integer = @{ ASCII_DIGIT+ } -map = { "/*" ~ integer ~ ":" ~ integer ~ "*/" } +next_line = { "+" } + +map = { "/*" ~ integer ~ ":" ~ integer ~ next_line? ~ "*/" } non_map = { (!map ~ ANY)+ } -mapping = { map | non_map } +mapping = { SOI ~ (map | non_map)* ~ EOI } diff --git a/parser/src/rev_mapper/mod.rs b/parser/src/rev_mapper/mod.rs index f648d87..ff9fbcf 100644 --- a/parser/src/rev_mapper/mod.rs +++ b/parser/src/rev_mapper/mod.rs @@ -16,18 +16,31 @@ pub struct RustMap(pub usize, pub usize); pub fn get_mapping(input: &str) -> HashSet<(RustMap, MistMap)> { let mut mapping = HashSet::new(); - let pairs = MistMapperParser::parse(Rule::mapping, input).unwrap(); + let pairs = MistMapperParser::parse(Rule::mapping, input) + .unwrap() + .next() + .unwrap() + .into_inner(); for pair in pairs { if pair.as_rule() == Rule::map { let rs = pair.as_span().start_pos().line_col(); let mut inner = pair.into_inner(); + let (line, col) = ( + inner.next().unwrap().as_str().parse().unwrap(), + inner.next().unwrap().as_str().parse().unwrap(), + ); + mapping.insert(( RustMap(rs.0, rs.1), MistMap( - inner.next().unwrap().as_str().parse().unwrap(), - inner.next().unwrap().as_str().parse().unwrap(), + if inner.next().is_some() { + line + } else { + line - 1 + }, + col, ), )); }