# File rlml.rb, line 31
    def parse(data)
      scanner = StringScanner.new(data)

      start_document

      if scanner.scan %:^rlml/(.*)[\n\s]+:
        encoding scanner[1].strip
        scanner.pos -= 1        # Step back for whitespace
      else
        encoding nil
      end
 
      until scanner.empty?
        if scanner.scan /\n?\s*#(.*)/
          comment scanner[1]
          next
        end

        scanner.scan /(\s|\n)+/
        
        if scanner.scan /([\w.]+)(\s|\n)*\{/
          start_tag scanner[1]
        elsif scanner.scan /\[(.*?)\]/m
          comment scanner[1]
        elsif scanner.scan /"(.*?([^\\]|\\\\))"/
          data scanner[1].gsub('\t', "\t").gsub('\"', "\"").
                          gsub('\r', "\r").gsub('\n', "\n").gsub('\\\\', "\\")
        elsif scanner.scan /\}/
          end_tag
        else
          unless scanner.rest == ""
            raise ParseError, "Can't parse: `#{scanner.rest}'"
          end
        end
      end
      
      end_document
    end