Working mapping
This commit is contained in:
@@ -2,8 +2,10 @@ WHITESPACE = _{ " " | "\t" | "\r" | "\n" }
|
|||||||
|
|
||||||
integer = @{ ASCII_DIGIT+ }
|
integer = @{ ASCII_DIGIT+ }
|
||||||
|
|
||||||
map = { "/*" ~ integer ~ ":" ~ integer ~ "*/" }
|
next_line = { "+" }
|
||||||
|
|
||||||
|
map = { "/*" ~ integer ~ ":" ~ integer ~ next_line? ~ "*/" }
|
||||||
|
|
||||||
non_map = { (!map ~ ANY)+ }
|
non_map = { (!map ~ ANY)+ }
|
||||||
|
|
||||||
mapping = { map | non_map }
|
mapping = { SOI ~ (map | non_map)* ~ EOI }
|
||||||
|
|||||||
@@ -16,18 +16,31 @@ pub struct RustMap(pub usize, pub usize);
|
|||||||
pub fn get_mapping(input: &str) -> HashSet<(RustMap, MistMap)> {
|
pub fn get_mapping(input: &str) -> HashSet<(RustMap, MistMap)> {
|
||||||
let mut mapping = HashSet::new();
|
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 {
|
for pair in pairs {
|
||||||
if pair.as_rule() == Rule::map {
|
if pair.as_rule() == Rule::map {
|
||||||
let rs = pair.as_span().start_pos().line_col();
|
let rs = pair.as_span().start_pos().line_col();
|
||||||
let mut inner = pair.into_inner();
|
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((
|
mapping.insert((
|
||||||
RustMap(rs.0, rs.1),
|
RustMap(rs.0, rs.1),
|
||||||
MistMap(
|
MistMap(
|
||||||
inner.next().unwrap().as_str().parse().unwrap(),
|
if inner.next().is_some() {
|
||||||
inner.next().unwrap().as_str().parse().unwrap(),
|
line
|
||||||
|
} else {
|
||||||
|
line - 1
|
||||||
|
},
|
||||||
|
col,
|
||||||
),
|
),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user