kv_to_seq (OpenID::Util)

    # File lib/openid/kvform.rb, line 63
        def Util.kv_to_seq(data, strict=false)
          # After one parse, seq_to_kv and kv_to_seq are inverses, with no
          # warnings:
          #
          # seq = kv_to_seq(s)
          # seq_to_kv(kv_to_seq(seq)) == seq
          err = lambda { |msg|
            msg = "kv_to_seq warning: #{msg}: #{data.inspect}"
            if strict
              raise KVFormError, msg
            else
              Util.log(msg)
            end
          }

          lines = data.split("\n")
          if data.length == 0
            return []
          end

          if data[-1].chr != "\n"
            err.call("Does not end in a newline")
            # We don't expect the last element of lines to be an empty
            # string because split() doesn't behave that way.
          end

          pairs = []
          line_num = 0
          lines.each { |line|
            line_num += 1

            # Ignore blank lines
            if line.strip() == ""
              next
            end

            pair = line.split(':', 2)
            if pair.length == 2
              k, v = pair
              k_s = k.strip()
              if k_s != k
                msg = "In line #{line_num}, ignoring leading or trailing whitespace in key #{k.inspect}"
                err.call(msg)
              end

              if k_s.length == 0
                err.call("In line #{line_num}, got empty key")
              end

              v_s = v.strip()
              if v_s != v
                msg = "In line #{line_num}, ignoring leading or trailing whitespace in value #{v.inspect}"
                err.call(msg)
              end

              pairs << [k_s, v_s]
            else
              err.call("Line #{line_num} does not contain a colon")
            end
          }

          return pairs
        end