///Parses comment, which can start with # or !
comment = _{spaces* ~ ("#"|"!") ~ (!NEWLINE ~ ANY)*}
///One or more spaces or tabs
spaces = _{(" "|"\t")+}
///property, which is:
///key=value, OR
///key: value, OR
///key value
property = {spaces* ~ key ~ ((spaces* ~ ("="|":"))|(spaces*)) ~ spaces* ~ value ~ spaces*}
///key in property
key = {(ASCII_ALPHANUMERIC | "_")+}
///value in property
value = {(!NEWLINE ~ ANY)*}
///parses the whole file .properties
file = { SOI ~ (spaces | NEWLINE | comment | property)* ~ silentEOI }
///used in order not to get "EOI" in output
silentEOI = _{!ANY}