# HG changeset patch # User Link Mauve # Date 1759144215 0 # Node ID d08eb4c9fce32675a185ccad7c2889532d883e44 # Parent 317e93b7d586ac71446e256c345ef1f9e8af6017 formats: Upgrade nom to version 8 diff --git a/formats/Cargo.toml b/formats/Cargo.toml --- a/formats/Cargo.toml +++ b/formats/Cargo.toml @@ -10,7 +10,7 @@ # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -nom = { version = "7", default-features = false, features = ["alloc"] } +nom = { version = "8", default-features = false, features = ["alloc"] } encoding_rs = "0.8" bitflags = "1" touhou-utils = "*" diff --git a/formats/src/th06/anm0.rs b/formats/src/th06/anm0.rs --- a/formats/src/th06/anm0.rs +++ b/formats/src/th06/anm0.rs @@ -2,9 +2,9 @@ use nom::{ IResult, + Parser, bytes::complete::{tag, take_while_m_n}, number::complete::{le_u8, le_u16, le_u32, le_i32, le_f32}, - sequence::tuple, multi::{many_m_n, many0}, }; use std::collections::BTreeMap; @@ -77,7 +77,7 @@ impl Anm0 { /// Parse a slice of bytes into an `Anm0` struct. pub fn from_slice(data: &[u8]) -> IResult<&[u8], Vec> { - many0(parse_anm0)(data) + many0(parse_anm0).parse(data) } /// TODO @@ -98,7 +98,7 @@ } fn parse_sprite(i: &[u8]) -> IResult<&[u8], Sprite> { - let (i, (index, x, y, width, height)) = tuple((le_u32, le_f32, le_f32, le_f32, le_f32))(i)?; + let (i, (index, x, y, width, height)) = (le_u32, le_f32, le_f32, le_f32, le_f32).parse(i)?; Ok((i, Sprite { index, x, @@ -175,17 +175,17 @@ let (i, (num_sprites, num_scripts, _, width, height, format, color_key, first_name_offset, _, second_name_offset, version, _, _texture_offset, has_data, _next_offset, _)) = - tuple((le_u32, le_u32, tag(b"\0\0\0\0"), le_u32, le_u32, le_u32, le_u32, le_u32, - tag(b"\0\0\0\0"), le_u32, le_u32, tag(b"\0\0\0\0"), le_u32, le_u32, le_u32, - tag(b"\0\0\0\0")))(input)?; + (le_u32, le_u32, tag(&b"\0\0\0\0"[..]), le_u32, le_u32, le_u32, le_u32, le_u32, + tag(&b"\0\0\0\0"[..]), le_u32, le_u32, tag(&b"\0\0\0\0"[..]), le_u32, le_u32, le_u32, + tag(&b"\0\0\0\0"[..])).parse(input)?; assert_eq!(version, 0); assert_eq!(has_data, 0); let num_sprites = num_sprites as usize; let num_scripts = num_scripts as usize; - let (i, sprite_offsets) = many_m_n(num_sprites, num_sprites, le_u32)(i)?; - let (_, script_offsets) = many_m_n(num_scripts, num_scripts, tuple((le_u32, le_u32)))(i)?; + let (i, sprite_offsets) = many_m_n(num_sprites, num_sprites, le_u32).parse(i)?; + let (_, script_offsets) = many_m_n(num_scripts, num_scripts, (le_u32, le_u32)).parse(i)?; let png_filename = if first_name_offset > 0 { if input.len() < first_name_offset as usize { @@ -233,7 +233,7 @@ let tell = input.len() - i.len(); instruction_offsets.push(tell - offset); // TODO: maybe check against the size of parsed data? - let (i2, (time, opcode, _size)) = tuple((le_u16, le_u8, le_u8))(i)?; + let (i2, (time, opcode, _size)) = (le_u16, le_u8, le_u8).parse(i)?; let (i2, instr) = parse_instruction_args(i2, opcode)?; instructions.push(Call { time, instr }); i = i2; diff --git a/formats/src/th06/ecl.rs b/formats/src/th06/ecl.rs --- a/formats/src/th06/ecl.rs +++ b/formats/src/th06/ecl.rs @@ -2,8 +2,8 @@ use nom::{ IResult, + Parser, number::complete::{le_u8, le_u16, le_u32, le_i16, le_i32, le_f32}, - sequence::tuple, multi::{count, many0}, error::ErrorKind, Err, @@ -329,12 +329,12 @@ fn parse_sub_instruction(input: &[u8]) -> IResult<&[u8], CallSub> { let i = &input[..]; - let (i, (time, opcode)) = tuple((le_i32, le_u16))(i)?; + let (i, (time, opcode)) = (le_i32, le_u16).parse(i)?; if time == -1 || opcode == 0xffff { return Err(Err::Error(nom::error::Error::new(i, ErrorKind::Eof))); } - let (i, (size, rank_mask, param_mask)) = tuple((le_u16, le_u16, le_u16))(i)?; + let (i, (size, rank_mask, param_mask)) = (le_u16, le_u16, le_u16).parse(i)?; let rank_mask = Rank::from_bits(rank_mask).unwrap(); let (i, instr) = parse_sub_instruction_args(i, opcode)?; assert_eq!(input.len() - i.len(), size as usize); @@ -343,19 +343,19 @@ } fn parse_sub(i: &[u8]) -> IResult<&[u8], Sub> { - let (i, instructions) = many0(parse_sub_instruction)(i)?; + let (i, instructions) = many0(parse_sub_instruction).parse(i)?; let sub = Sub { instructions }; Ok((i, sub)) } fn parse_main_instruction(input: &[u8]) -> IResult<&[u8], CallMain> { let i = &input[..]; - let (i, (time, sub)) = tuple((le_u16, le_u16))(i)?; + let (i, (time, sub)) = (le_u16, le_u16).parse(i)?; if time == 0xffff && sub == 4 { return Err(Err::Error(nom::error::Error::new(i, ErrorKind::Eof))); } - let (i, (opcode, size)) = tuple((le_u16, le_u16))(i)?; + let (i, (opcode, size)) = (le_u16, le_u16).parse(i)?; let size = size as usize; let (i, instr) = parse_main_instruction_args(i, opcode)?; assert_eq!(input.len() - i.len(), size as usize); @@ -364,7 +364,7 @@ } fn parse_main(i: &[u8]) -> IResult<&[u8], Main> { - let (i, instructions) = many0(parse_main_instruction)(i)?; + let (i, instructions) = many0(parse_main_instruction).parse(i)?; let main = Main { instructions }; Ok((i, main)) } @@ -372,7 +372,7 @@ fn parse_ecl(input: &[u8]) -> IResult<&[u8], Ecl> { let i = input; - let (i, (sub_count, main_count)) = tuple((le_u16, le_u16))(i)?; + let (i, (sub_count, main_count)) = (le_u16, le_u16).parse(i)?; let sub_count = sub_count as usize; if main_count != 0 { @@ -380,10 +380,10 @@ return Err(Err::Error(nom::error::Error::new(i, ErrorKind::Eof))); } - let (_, (main_offsets, sub_offsets)) = tuple(( + let (_, (main_offsets, sub_offsets)) = ( count(le_u32, 3), count(le_u32, sub_count), - ))(i)?; + ).parse(i)?; // Read all subs. let mut subs = Vec::new(); diff --git a/formats/src/th06/std.rs b/formats/src/th06/std.rs --- a/formats/src/th06/std.rs +++ b/formats/src/th06/std.rs @@ -2,9 +2,9 @@ use nom::{ IResult, + Parser, bytes::complete::tag, number::complete::{le_u8, le_u16, le_u32, le_i32, le_f32}, - sequence::tuple, combinator::map, multi::{many0, count}, error::ErrorKind, @@ -164,13 +164,13 @@ } fn parse_quad(i: &[u8]) -> IResult<&[u8], Quad> { - let (i, (unk1, size)) = tuple((le_u16, le_u16))(i)?; + let (i, (unk1, size)) = (le_u16, le_u16).parse(i)?; if unk1 == 0xffff { return Err(Err::Error(nom::error::Error::new(i, ErrorKind::Eof))); } // TODO: replace this assert with a custom error. assert_eq!(size, 0x1c); - let (i, (anm_script, _, x, y, z, width, height)) = tuple((le_u16, tag(b"\0\0"), le_f32, le_f32, le_f32, le_f32, le_f32))(i)?; + let (i, (anm_script, _, x, y, z, width, height)) = (le_u16, tag(&b"\0\0"[..]), le_f32, le_f32, le_f32, le_f32, le_f32).parse(i)?; let quad = Quad { anm_script, pos: Position { x, y, z }, @@ -180,7 +180,7 @@ } fn parse_model(i: &[u8]) -> IResult<&[u8], Model> { - let (i, (_id, unknown, x, y, z, width, height, depth, quads)) = tuple((le_u16, le_u16, le_f32, le_f32, le_f32, le_f32, le_f32, le_f32, many0(parse_quad)))(i)?; + let (i, (_id, unknown, x, y, z, width, height, depth, quads)) = (le_u16, le_u16, le_f32, le_f32, le_f32, le_f32, le_f32, le_f32, many0(parse_quad)).parse(i)?; let bounding_box = [x, y, z, width, height, depth]; let model = Model { unknown, @@ -191,7 +191,7 @@ } fn parse_instance(i: &[u8]) -> IResult<&[u8], Instance> { - let (i, (id, unknown, x, y, z)) = tuple((le_u16, le_u16, le_f32, le_f32, le_f32))(i)?; + let (i, (id, unknown, x, y, z)) = (le_u16, le_u16, le_f32, le_f32, le_f32).parse(i)?; if id == 0xffff && unknown == 0xffff { return Err(Err::Error(nom::error::Error::new(i, ErrorKind::Eof))); } @@ -205,7 +205,7 @@ } fn parse_instruction(i: &[u8]) -> IResult<&[u8], Call> { - let (i, (time, opcode, size)) = tuple((le_u32, le_u16, le_u16))(i)?; + let (i, (time, opcode, size)) = (le_u32, le_u16, le_u16).parse(i)?; if time == 0xffffffff && opcode == 0xffff && size == 0xffff { return Err(Err::Error(nom::error::Error::new(i, ErrorKind::Eof))); } @@ -220,15 +220,15 @@ fn parse_stage(input: &[u8]) -> IResult<&[u8], Stage> { let i = &input[..]; - let (i, (num_models, _num_faces, object_instances_offset, script_offset, _, name, music_names, music_paths)) = tuple(( - le_u16, le_u16, le_u32, le_u32, tag(b"\0\0\0\0"), + let (i, (num_models, _num_faces, object_instances_offset, script_offset, _, name, music_names, music_paths)) = ( + le_u16, le_u16, le_u32, le_u32, tag(&b"\0\0\0\0"[..]), le_String, - map(tuple((le_String, le_String, le_String, le_String)), |(a, b, c, d)| [a, b, c, d]), - map(tuple((le_String, le_String, le_String, le_String)), |(a, b, c, d)| [a, b, c, d]) - ))(i)?; + map((le_String, le_String, le_String, le_String), |(a, b, c, d)| [a, b, c, d]), + map((le_String, le_String, le_String, le_String), |(a, b, c, d)| [a, b, c, d]) + ).parse(i)?; let musics = music_names.iter().zip(&music_paths).map(|(name, path)| if name == " " { None } else { Some((name.clone(), path.clone())) }).collect(); - let (_, offsets) = count(le_u32, num_models as usize)(i)?; + let (_, offsets) = count(le_u32, num_models as usize).parse(i)?; let mut models = vec![]; for offset in offsets { @@ -236,8 +236,8 @@ models.push(model); } - let (_, instances) = many0(parse_instance)(&input[object_instances_offset as usize..])?; - let (_, script) = many0(parse_instruction)(&input[script_offset as usize..])?; + let (_, instances) = many0(parse_instance).parse(&input[object_instances_offset as usize..])?; + let (_, script) = many0(parse_instruction).parse(&input[script_offset as usize..])?; let stage = Stage { name,