requirements 0.3.0

Python PIP requirements.txt parser
Documentation
WHITESPACE = _{ " " | "\t" }

requirement_file = { SOI ~ ((line)? ~ NEWLINE)* }

// meta = { meta | requirement }
line = { extra_index_url | comment | package | path }

package = { name ~ extras? ~ (version | ",")* ~ comment? }
    name = @{ LETTER ~ chars }
    extras = { "[" ~ (extra | ",")+ ~ "]" }
        extra = @{ chars }
    version = { comparison ~ number }

path = { editable? ~ chars }
editable = { ("-e" | "--editable") }

comment = { "#" ~ some_text }

extra_index_url = { "--extra-index-url" ~ url }


comparison = _{ less_than | less_than_or_equal | not_equal | equal | greater_than_or_equal | greater_than | compatible_release | arbitrary_equal }
    less_than = { "<" }
    less_than_or_equal = { "<=" }
    not_equal = { "!=" }
    equal = { "==" }
    greater_than_or_equal = { ">=" }
    greater_than = { ">" }
    compatible_release = { "~=" }
    arbitrary_equal = { "===" }

vcs = _{ git | hg | svn | bzr }
    git = { "git" }
    hg = { "hg" }
    svn = { "svn" }
    bzr = { "bzr" }

chars = _{ (ASCII_ALPHANUMERIC | "_" | "-")+ }
version_char = _{ (ASCII_ALPHANUMERIC | ".") }
number = @{ version_char+ }
some_char = _{ (LETTER | NUMBER | PUNCTUATION | SYMBOL) }
some_text = { some_char* }
url = @{ "http" ~ "s"? ~ "://" ~ some_char+ }