passgen-rs 0.1.0

Password generator with a regular-expression-like syntax
Documentation

pattern = _{ SOI ~ segments ~ EOI }

// common definitions
decimal_digit = _{ '0'..'9' }
hexadecimal_digit = _{ decimal_digit | 'a'..'f' | 'A'..'F' }
decimal_number = { decimal_digit{1,20} }

// group parsing
group = { "(" ~ segments ~ ")" }
segments = _{ segment ~ ( "|" ~ segment )* }
segment = { (!("|" | ")") ~ item)* }

// item parsing
item = { (group | set | special | literal) ~ repeat? ~ optional? }
repeat = { "{" ~ decimal_number ~ ("," ~ decimal_number)? ~ "}" }
optional = { "?" }

// set parsing
set = { "[" ~ (!("]") ~ range)+ ~ "]" }
range = { literal ~ ( "-" ~ literal )? }

// literal parsing
literal = { unicode | escaped }
escaped = { "\\[" }
unicode = { ANY }

// special parsing
special = { wordlist | markov }
wordlist = { "\\w{" ~ special_name ~ "}" }
markov = { "\\m{" ~ special_name ~ "}" }
special_name = { (!"}" ~ ANY)+ }