mermaid-parser 0.1.0

Lightweight Mermaid class-diagram parser powered by pest
Documentation
WHITESPACE = _{ " " | "\t" }
comment = {
    "%%" ~ (!NEWLINE ~ ANY)*
}
note = {
    "note" ~ quoted_text
}
quoted_text = { "\"" ~ (!"\"" ~ ANY)* ~ "\"" }
variable_identifier = @{
    (ASCII_ALPHA | "_") ~
    ((("_"|"-") ~ &ASCII_ALPHANUMERIC)
        | ASCII_ALPHANUMERIC
    )*
}

method_identifier = @{
    ASCII_ALPHA
    ~
    ((("_"|"-") ~ &ASCII_ALPHANUMERIC)
    | ASCII_ALPHANUMERIC
    )*
}

class_identifier = @{
    ASCII_ALPHA
    ~
    ((("_"|"-") ~ &ASCII_ALPHANUMERIC)
    | ASCII_ALPHANUMERIC
    )*
}

class = { "class" ~ class_identifier }

class_label = {
    class ~ "[\"" ~ (!"\"" ~ ANY)* ~ "\"]"
}
class_property = {
    class_identifier ~ ":" ~ visibility? ~ (
        class_identifier ~ variable_identifier
      | variable_identifier
    )
}
class_method = {
    class_identifier ~ ":" ~ visibility? ~ class_identifier? ~ method_identifier ~ method_parameter
}
method_parameter = {
    "(" ~ class_identifier* ~ ")"
}

file = {
   SOI
   ~ "classDiagram"
   ~ NEWLINE+
   ~ statement
   ~ EOI
}

statement = _{((class | relation_stmt | member_stmt | comment) ~ NEWLINE*)*}


relation_stmt = {
    class_identifier ~ relation ~ class_identifier
}

relation = _{ aggregation | composition | inheritance | realization | association | dependency | link }

aggregation   = { "o--" | "--o" }
composition   = { "*--" | "--*" }
inheritance   = { "<|--" | "--|>" }
realization   = { "<|.." | "..|>" }
association   = { "-->" | "<--" }
dependency    = { "..>" | "<.." }
link          = { "--" }

member_stmt = {
    class_identifier ~ ":" ~ class_identifier ~ class_identifier
}

visibility = _{public | private | protected | package}

public = { "+" }
private = { "-" }
protected = { "#" }
package = { "~" }

classifier = _{abstract | static}
abstract = { "*" }
static = { "$" }


// Tests

test_class_explicit = {
    SOI ~ class ~ EOI
}
test_class_labels = {
    SOI ~ class_label ~ EOI
}
test_class_property = {
    SOI ~ class_property ~ EOI
}
test_class_method = {
    SOI ~ class_method ~ EOI
}
test_comment = {
    SOI ~ comment ~ EOI
}
test_note = {
    SOI ~ note ~ EOI
}