lib/vobject/vcard/v3_0/grammar.rb in vobject-1.0.2 vs lib/vobject/vcard/v3_0/grammar.rb in vobject-1.1.0

- old
+ new

@@ -30,101 +30,101 @@ beginend = /BEGIN/i.r | /END/i.r # parameters && parameter types paramname = /ENCODING/i.r | /LANGUAGE/i.r | /CONTEXT/i.r | /TYPE/i.r | /VALUE/i.r | /PREF/i.r otherparamname = C::NAME_VCARD ^ paramname - paramvalue = C::QUOTEDSTRING_VCARD.map { |s| s } | C::PTEXT_VCARD.map(&:upcase) + paramvalue = C::QUOTEDSTRING_VCARD.map { |s| s } | C::PTEXT_VCARD.map { |x, _| x.upcase } # prefvalue = /[0-9]{1,2}/i.r | "100".r valuetype = /URI/i.r | /DATE/i.r | /DATE-TIME/i.r | /BINARY/i.r | /PTEXT/i.r # mediaattr = /[!\"#$%&'*+.^A-Z0-9a-z_`i{}|~-]+/.r # mediavalue1 = mediaattr | C::QUOTEDSTRING_VCARD - # mediatail = seq(";".r >> mediaattr, "=".r << mediavalue1).map do |a, v| + # mediatail = seq(";".r >> mediaattr, "=".r << mediavalue1).map do |(a, v)| # ";#{a}=#{v}" # end # rfc4288regname = /[A-Za-z0-9!#$&.+^+-]{1,127}/.r # rfc4288typename = rfc4288regname # rfc4288subtypename = rfc4288regname - # mediavalue = seq(rfc4288typename << "/".r, rfc4288subtypename, # mediatail.star).map do |t, s, tail| + # mediavalue = seq(rfc4288typename << "/".r, rfc4288subtypename, # mediatail.star).map do |(t, s, tail)| # ret = "#{t}/#{s}" # ret = ret . tail[0] unless tail.empty? # ret # end - pvalue_list = (seq(paramvalue << ",".r, lazy { pvalue_list }) & /[;:]/.r).map do |e, list| + pvalue_list = (seq(paramvalue << ",".r, lazy { pvalue_list }) & /[;:]/.r).map do |(e, list)| [e.sub(Regexp.new("^\"(.+)\"$"), '\1').gsub(/\\n/, "\n"), list].flatten end | (paramvalue & /[;:]/.r).map do |e| [e.sub(Regexp.new("^\"(.+)\"$"), '\1').gsub(/\\n/, "\n")] end - typevaluelist = seq(C::IANATOKEN, ",".r >> lazy { typevaluelist }).map do |t, l| + typevaluelist = seq(C::IANATOKEN, ",".r >> lazy { typevaluelist }).map do |(t, l)| [t.upcase, l].flatten end | C::IANATOKEN.map { |t| [t.upcase] } - quoted_string_list = (seq(C::QUOTEDSTRING_VCARD << ",".r, lazy { quoted_string_list }) & /[;:]/.r).map do |e, list| + quoted_string_list = (seq(C::QUOTEDSTRING_VCARD << ",".r, lazy { quoted_string_list }) & /[;:]/.r).map do |(e, list)| [e.sub(Regexp.new("^\"(.+)\"$"), '\1').gsub(/\\n/, "\n"), list].flatten end | (C::QUOTEDSTRING_VCARD & /[;:]/.r).map do |e| [e.sub(Regexp.new("^\"(.+)\"$"), '\1').gsub(/\\n/, "\n")] end - # fmttypevalue = seq(rfc4288typename, "/", rfc4288subtypename).map(&:join) + # fmttypevalue = seq(rfc4288typename, "/", rfc4288subtypename).map {|x, _| x.join } rfc1766primarytag = /[A-Za-z]{1,8}/.r - rfc1766subtag = seq("-", /[A-Za-z]{1,8}/.r) { |a, b| a + b } - rfc1766language = seq(rfc1766primarytag, rfc1766subtag.star) do |a, b| + rfc1766subtag = seq("-", /[A-Za-z]{1,8}/.r) { |(a, b)| a + b } + rfc1766language = seq(rfc1766primarytag, rfc1766subtag.star) do |(a, b)| a += b[0] unless b.empty? a end - param = seq(/ENCODING/i.r, "=", /b/.r) do |name, _, val| + param = seq(/ENCODING/i.r, "=", /b/.r) do |(name, _, val)| { name.upcase.tr("-", "_").to_sym => val } - end | seq(/LANGUAGE/i.r, "=", rfc1766language) do |name, _, val| + end | seq(/LANGUAGE/i.r, "=", rfc1766language) do |(name, _, val)| { name.upcase.tr("-", "_").to_sym => val.upcase } - end | seq(/CONTEXT/i.r, "=", /word/.r) do |name, _, val| + end | seq(/CONTEXT/i.r, "=", /word/.r) do |(name, _, val)| { name.upcase.tr("-", "_").to_sym => val.upcase } - end | seq(/TYPE/i.r, "=", typevaluelist) do |name, _, val| + end | seq(/TYPE/i.r, "=", typevaluelist) do |(name, _, val)| { name.upcase.tr("-", "_").to_sym => val } - end | seq(/VALUE/i.r, "=", valuetype) do |name, _, val| + end | seq(/VALUE/i.r, "=", valuetype) do |(name, _, val)| { name.upcase.tr("-", "_").to_sym => val } end | /PREF/i.r.map do |_name| # this is likely erroneous use of VCARD 2.1 convention in RFC2739; converting to canonical TYPE=PREF { TYPE: ["PREF"] } - end | seq(otherparamname, "=", pvalue_list) do |name, _, val| + end | seq(otherparamname, "=", pvalue_list) do |(name, _, val)| val = val[0] if val.length == 1 { name.upcase.tr("-", "_").to_sym => val } - end | seq(paramname, "=", pvalue_list) do |name, _, val| + end | seq(paramname, "=", pvalue_list) do |(name, _, val)| parse_err("Violated format of parameter value #{name} = #{val}") end - params = seq(";".r >> param & ";", lazy { params }) do |p, ps| + params = seq(";".r >> param & ";", lazy { params }) do |(p, ps)| p.merge(ps) do |key, old, new| if @cardinality1[:PARAM].include?(key) parse_err("Violated cardinality of parameter #{key}") end [old, new].flatten # deal with duplicate properties end end | seq(";".r >> param).map { |e| e[0] } contentline = seq(linegroup._?, C::NAME_VCARD, params._? << ":".r, - C::VALUE, /(\r|\n|\r\n)/) do |g, name, p, value, _| + C::VALUE, /(\r|\n|\r\n)/) do |(g, name, p, value, _)| key = name.upcase.tr("-", "_").to_sym hash = { key => {} } hash[key][:value], errors1 = Typegrammars.typematch(strict, key, p[0], :GENERIC, value, @ctx) errors << errors1 hash[key][:group] = g[0] unless g.empty? errors << Paramcheck.paramcheck(strict, key, p.empty? ? {} : p[0], @ctx) hash[key][:params] = p[0] unless p.empty? hash end - props = seq(contentline, lazy { props }) do |c, rest| + props = seq(contentline, lazy { props }) do |(c, rest)| c.merge(rest) do |key, old, new| if @cardinality1[:PROP].include?(key.upcase) parse_err("Violated cardinality of property #{key}") end [old, new].flatten # deal with duplicate properties end end | ("".r & beginend).map { {} } calpropname = /VERSION/i.r - calprop = seq(linegroup._?, calpropname << ":".r, C::VALUE, /[\r\n]/) do |g, key, value, _| + calprop = seq(linegroup._?, calpropname << ":".r, C::VALUE, /[\r\n]/) do |(g, key, value, _)| key = key.upcase.tr("-", "_").to_sym hash = { key => {} } hash[key][:value], errors1 = Typegrammars.typematch(strict, key, nil, :VCARD, value, @ctx) errors << errors1 hash[key][:group] = g[0] unless g.empty?