- IANAToken =
'[a-zA-Z\d\-]+?'
- Cr =
"\u000d"
- Lf =
"\u000a"
- Crlf =
"(#{Cr}|#{Lf})"
- Utf8_tail =
'[\u0080-\u00bf]'
- Utf8_2 =
'([\u00c2-\u00df]|' + "#{Utf8_tail})"
- Utf8_3 =
'([\u00e0\u00a0-\u00bf\u00e1-\u00ec\u00ed\u0080-\u009f\u00ee-\u00ef]|' + "#{Utf8_tail})"
- Utf8_4 =
'([\u00f0\u0090-\u00bf\u00f1-\u00f3\u00f4\u0080-\u008f]|' + "#{Utf8_tail})"
- Wsp =
'[ \t]'
- VChar =
'[\u0021-\u007e]'
- NonASCII =
"(#{Utf8_2}|#{Utf8_3}|#{Utf8_4})"
- QSafeChar =
"(#{Wsp}|" + '[!\u0023-\u007e]' + "|#{NonASCII})"
- SafeChar =
"(#{Wsp}|" + '[!\u0023-\u0039\u003c-\u007e]' + "|#{NonASCII})"
- ValueChar =
"(#{Wsp}|#{VChar}|#{NonASCII})"
- DQuote =
'"'
- PText =
"#{SafeChar}*?"
- QuotedString =
"#{DQuote}(#{QSafeChar}*?)#{DQuote}"
- XName =
"[xX]-#{IANAToken}"
- Group =
IANAToken
- Name =
"(#{XName}|#{IANAToken})"
- ParamName =
"(#{XName}|#{IANAToken})"
- ParamValue =
"(#{PText}|#{QuotedString})"
- PValueList =
"(?<head>#{ParamValue})(?<tail>(,#{ParamValue})*)"
- Pid =
'\d+(\.\d+)*'
- PidList =
"(?<head>#{Pid})(?<tail>(,#{Pid})*)"
- Param =
"(?<pname>#{ParamName})=(?<pvalue>#{PValueList})"
- Params =
"(;(?<phead>#{Param}))(?<ptail>(;#{Param})*)"
- Value =
"#{ValueChar}*?"
- LineGroup =
"((?<group>#{Group})" + '\.' + ")?"
- Contentline =
"#{LineGroup}(?<key>#{Name})(?<params>(#{Params})?):(?<value>#{Value})#{Crlf}"
- BeginLine =
"BEGIN:#{IANAToken}#{Crlf}"
- VersionLine =
"VERSION:#{Value}#{Crlf}"
- EndLine =
"END:#{IANAToken}#{Crlf}"
- Vobject =
"#{BeginLine}#{VersionLine}(#{Contentline})+#{EndLine}"