writing 0.2.1

Writing, is a simple tool for code-document sync.
Documentation
start = _{ SOI ~ declaration* ~ EOI}

declaration = {
    doc_code_decl
    | code_section_decl
    | code_dep_decl
    | code_func_decl
}

doc_code_decl = {
  "doc-code" ~ ":" ~ "file" ~ "(" ~ string_literal ~ ")" ~ "." ~ "line" ~ "(" ~ ")" ~ "[" ~ start_line? ~ "," ~ end_line? ~ "]"
}

code_section_decl = {
  "doc-section" ~ ":" ~ "file" ~ "(" ~ string_literal ~ ")" ~ "." ~ "section" ~ "(" ~ section_name ~ ")"
}

// polymorphism??
code_func_decl = {
  "doc-func" ~ ":" ~ "file" ~ "(" ~ string_literal ~ ")" ~ "." ~ "func" ~ "(" ~ ")" ~ "[" ~ func_name ~ (","  ~ func_name)* ~ "]"
}

func_name = {
    string_literal
}

section_name = {
    string_literal
}

code_dep_decl = {
   "code-dep" ~ ":" ~ (group_id ~ ":")? ~ artifact_id ~ ";" ~ "version" ~ "=" ~ version
}

group_id = { identifier }
artifact_id = { identifier }

start_line = { digits }
end_line = { digits }

string_literal = @{
    double_quoted_string |
    single_quoted_string
}

digit = { '0'..'9' }
digits = { digit+ }

version = @{ digit ~ ("." ~ digit)* }

identifier = @{ (ASCII_ALPHA | ASCII_ALPHANUMERIC | "_") ~ (ASCII_ALPHANUMERIC | "_")* }

double_quoted_string  = @{ "\"" ~ (!("\"") ~ ANY)* ~ "\""}
single_quoted_string  = @{ "\'" ~ (!("\'") ~ ANY)* ~ "\'"}

newline    = _{ "\n" | "\r\n" }
WHITESPACE = _{ " " | "\t" | NEWLINE }