Compare commits

..

No commits in common. "040bb4ecb3c642077e06d9748c5c0f3edd935648" and "2d5291c07bd392e4bc23c0b00e7ea17eb790cf40" have entirely different histories.

4 changed files with 24 additions and 12 deletions

View file

@ -96,11 +96,11 @@ fn impl_quick_modifier_parser(ast: DeriveInput) -> TokenStream {
( (
nom::combinator::value( nom::combinator::value(
true, true,
nom::character::complete::char(#name::#variant_name(Default::default()).token().0) nom::character::complete::char(#name::#variant_name(Default::default()).token()[0])
), ),
nom::combinator::value( nom::combinator::value(
false, false,
nom::character::complete::char(#name::#variant_name(Default::default()).token().1) nom::character::complete::char(#name::#variant_name(Default::default()).token()[1])
) )
) )
), ),

View file

@ -10,10 +10,8 @@ pub(super) enum Atom {
StartHere, StartHere,
Modifier(Modifier), Modifier(Modifier),
QuickModifier(QuickModifier), QuickModifier(QuickModifier),
Loop(u8, Vec<Atom>), Wrapper(WrapperKind, Vec<Atom>),
Tuple(Vec<Atom>), EmptyWrapper(WrapperKind),
Slope(SlopeModifier, Instruction, Vec<Atom>),
Comment,
} }
#[derive(ModifierParser)] #[derive(ModifierParser)]
@ -32,6 +30,13 @@ pub(super) enum QuickModifier {
Pizz(bool), Pizz(bool),
} }
pub(super) enum WrapperKind {
Loop(u8),
Tuple,
Slope(SlopeModifier, Instruction),
Comment,
}
#[derive(Clone, Copy, SlopeModifierParser)] #[derive(Clone, Copy, SlopeModifierParser)]
pub(super) enum SlopeModifier { pub(super) enum SlopeModifier {
Note, Note,

View file

@ -1,4 +1,4 @@
use super::{Atom, Modifier, QuickModifier, SlopeModifier}; use super::{Atom, Modifier, QuickModifier, SlopeModifier, WrapperKind};
pub(super) mod lexer; pub(super) mod lexer;
@ -23,6 +23,17 @@ pub(super) trait Token<T> {
fn token(self) -> T; fn token(self) -> T;
} }
impl Token<(char, char)> for WrapperKind {
fn token(self) -> (char, char) {
match self {
Self::Loop(_) => WrappingTokens::PARENTHESES,
Self::Tuple => WrappingTokens::SQUARE_BRACKETS,
Self::Slope(_, _) => WrappingTokens::BRACKETS,
WrapperKind::Comment => WrappingTokens::SEMICOLON_COMMA,
}
}
}
impl Token<(char, char)> for QuickModifier { impl Token<(char, char)> for QuickModifier {
fn token(self) -> (char, char) { fn token(self) -> (char, char) {
match self { match self {

View file

@ -1,11 +1,7 @@
use nom::{ use nom::{branch::alt, character::complete::char, combinator::value, IResult, Parser};
branch::alt, character::complete::char, combinator::value, sequence::delimited, IResult, Parser,
};
use crate::bng::score::QuickModifier; use crate::bng::score::QuickModifier;
use super::Token;
pub(crate) trait Parse: Sized { pub(crate) trait Parse: Sized {
fn parse(input: &str) -> IResult<&str, Self>; fn parse(input: &str) -> IResult<&str, Self>;
} }