cave-fmt 0.1.3

Parse various cave /speleo related data formats
Documentation
// this is a https://en.wikipedia.org/wiki/Parsing_expression_grammar
// It is meant for parsing Therion XVI Files.
// See https://docs.rs/cave-fmt/latest/cave_fmt/xvi/index.html

WHITESPACE = _{" "|"\t"|NEWLINE}
NAME       = @{(ASCII_ALPHANUMERIC|"_"|".")+}

NUMBER     = @{
    "-"? ~ ("0"|ASCII_NONZERO_DIGIT ~ ASCII_DIGIT*) ~ ("." ~ ASCII_DIGIT*)?
}
COLOR      = @{ASCII_ALPHANUMERIC+}
COORDINATE =  {NUMBER ~ NUMBER}

// set XVIgrids {1.0 m}
xvigrids =  {"XVIgrids" ~ "{" ~ NUMBER ~ ASCII_ALPHA+ ~ "}"}

// set XVIstations {{1037.95 236.26 2.54}}
station     =  {"{" ~ COORDINATE ~ NAME ~ "}"}
xvistations =  {"XVIstations" ~ "{" ~ station* ~ "}"}

// set XVIshots {{1623.27 1559.80 1620.91 1526.89}}
shot     =  {"{" ~ COORDINATE ~ COORDINATE ~ "}"}
xvishots =  {"XVIshots" ~ "{" ~ shot+ ~ "}"}

// set XVIsketchlines {{brown  4002.36 412.60  4007.87 413.39  4011.81 414.17  4014.17 414.17}}
scetchline     =  {"{" ~ COLOR ~ COORDINATE+ ~ "}"}
xvisketchlines =  {"XVIsketchlines" ~ "{" ~ scetchline+ ~ "}"}

// set XVIgrid {738.9763779527558 -109.84251968503936 39.370078740157474 0.0 0.0 39.370078740157474 84 93
xvigrid =  {"XVIgrid" ~ "{" ~ COORDINATE ~ NUMBER ~ NUMBER ~ NUMBER ~ NUMBER ~ NUMBER ~ NUMBER ~ "}"}

command   =  _{xvigrids|xvistations|xvishots|xvisketchlines|xvigrid}

file =  {
    SOI ~ ("set" ~ command)* ~ EOI
}