Skip to content

Commit d960ce1

Browse files
committed
Parse null labels
1 parent 539fc4f commit d960ce1

File tree

2 files changed

+22
-4
lines changed

2 files changed

+22
-4
lines changed

calmare/src/ed7.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,13 @@ pub fn write(f: &mut Context, scena: &Scena) {
168168
}
169169

170170
if let Some(labels) = labels {
171+
if labels.is_empty() {
172+
// need to keep this for roundtripping
173+
write!(f, "// NB: this line is meaningless, it's just here for roundtripping.");
174+
f.line();
175+
write!(f, "label blank");
176+
f.line().line();
177+
}
171178
for (i, lb) in labels.iter().enumerate() {
172179
f.val(&LabelId(i as u16)).suf(":").line().indent(|f| {
173180
f.kw("name").val(&lb.name).line();
@@ -181,9 +188,6 @@ pub fn write(f: &mut Context, scena: &Scena) {
181188
});
182189
f.line();
183190
}
184-
} else {
185-
// need to keep this for roundtripping
186-
f.kw("labels").kw("null").line().line();
187191
}
188192

189193
for (i, anim) in animations.iter().enumerate() {

calmare/src/parse/lower/scena/ed7.rs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ struct ScenaBuild {
3737
chars: Many<CharDefId, NpcOrMonster<Npc, Monster>>,
3838
triggers: Many<TriggerId, Trigger>,
3939
look_points: Many<LookPointId, LookPoint>,
40+
no_labels: bool,
4041
labels: Many<LabelId, Label>,
4142
animations: Many<AnimId, Animation>,
4243
sepith: Many<SepithId, [u8; 8]>,
@@ -58,7 +59,7 @@ pub fn parse(lines: &[Line], ctx: &Context) -> Result<Scena> {
5859

5960
let chip = scena.chip.get(|a| a.0 as usize);
6061
let (npcs, monsters) = chars(scena.chars);
61-
let labels = Some(scena.labels.get(|a| a.0 as usize));
62+
let labels = scena.labels.get(|a| a.0 as usize);
6263
let triggers = scena.triggers.get(|a| a.0 as usize);
6364
let look_points = scena.look_points.get(|a| a.0 as usize);
6465
let animations = scena.animations.get(|a| a.0 as usize);
@@ -69,6 +70,14 @@ pub fn parse(lines: &[Line], ctx: &Context) -> Result<Scena> {
6970
let placements = scena.placements.get(|a| a.0 as usize);
7071
let battles = scena.battles.get(|a| a.0 as usize);
7172

73+
let labels = if scena.no_labels {
74+
Some(Vec::new())
75+
} else if labels.is_empty() {
76+
None
77+
} else {
78+
Some(labels)
79+
};
80+
7281
let h = scena.header.get().ok_or(Error)?;
7382

7483
Ok(Scena {
@@ -261,6 +270,11 @@ fn parse_line(scena: &mut ScenaBuild, p: &mut Parse) -> Result<()> {
261270
});
262271
}
263272
"label" => {
273+
if test!(p, Token::Ident("blank")) {
274+
scena.labels.mark(p.tokens[0].0 | p.prev_span(), LabelId(0));
275+
scena.no_labels = true;
276+
return Ok(())
277+
}
264278
let S(s, n) = Val::parse(p)?;
265279
scena.labels.mark(p.tokens[0].0 | s, n);
266280
parse_data!(p => {

0 commit comments

Comments
 (0)