marin 0.1.0

Rust implementation of the DSL used for kantek (kv2.dev)
Documentation
Marin = { SOI ~ (Keyword | Flag | Value)* ~ EOI }

Keyword = { String ~ ":" ~ Value }

List = { "[" ~ Value ~ ("," ~ Value)* ~ "]" | "[" ~ "]" }

Value = { RangeExpr | Float | Int | List | Bool | String }

Flag = { "-" ~ FlagInner }
FlagInner = @{ ASCII_ALPHA ~ Bareword? }

RangeExpr = { RangeTo | Range }
Range = { Number ~ ".." ~ Number }
RangeTo = { ".." ~ Number }

String = { "\"" ~ Inner ~ "\"" | Bareword }
Bareword = @{ (ASCII_ALPHANUMERIC | "@" | "." | ":/" | "/")+ }

Inner = @{ (!("\"" | "\\") ~ ANY)* ~ (Escape ~ Inner)? }
Escape = @{ "\\" ~ ("\"" | "\\") }

Exp = @{ ^"e" ~ ("+" | "-")? ~ ASCII_DIGIT+ }
Number = @{ "-"? ~ ("0" | ASCII_NONZERO_DIGIT ~ ASCII_DIGIT*) }

Float = @{ Number ~ ("." ~ ASCII_DIGIT+ ~ Exp? | Exp) }
Int = @{ Number ~ !Bareword}

Bool = { "true" | "false" | "True" | "False" }

COMMENT = _{ "#" ~ (!NEWLINE ~ ANY)* }
WHITESPACE = _{ " " | "\t" | NEWLINE }