601: def parse
602: begin
603:
604: @data.position = 0
605: @data.jump_to(';')
606: @data.position += 1
607: @data.skip
608:
609:
610: @data.jump_to('charset')
611: @data.position += 1
612: @data.skip
613: unless @data.current_byte == '='
614:
615: return nil
616: end
617: @data.position += 1
618: @data.skip
619:
620: if ['"', "'"].include?(@data.current_byte)
621: quote_mark = @data.current_byte
622: @data.position += 1
623: old_position = @data.position
624: @data.jump_to(quote_mark)
625: return @data[old_position ... @data.position]
626: else
627:
628: old_position = @data.position
629: begin
630: @data.find_next(SPACE_CHARACTERS)
631: return @data[old_position ... @data.position]
632: rescue EOF
633:
634: return @data[old_position .. -1]
635: end
636: end
637: rescue EOF
638: return nil
639: end
640: end