class EPUB::CFI::Parser

Constants

Racc_arg
Racc_debug_parser
Racc_token_to_s_table
UNICODE_CHARACTER_EXCLUDING_SPECIAL_CHARS_AND_SPACE_AND_DOT_AND_COLON_AND_TILDE_AND_ATMARK_AND_SOLIDUS_AND_EXCLAMATION_MARK_PATTERN
UNICODE_CHARACTER_PATTERN

Public Class Methods

new(debug: $DEBUG) click to toggle source
Calls superclass method
# File lib/epub/cfi/parser.rb, line 15
def initialize(debug: $DEBUG)
  @yydebug = debug
  super()
end
parse(string, debug: $DEBUG) click to toggle source
# File lib/epub/cfi/parser.rb, line 10
def parse(string, debug: $DEBUG)
  new(debug: debug).parse(string)
end

Public Instance Methods

_reduce_none(val, _values, result) click to toggle source

reduce 80 omitted

# File lib/epub/cfi/parser.tab.rb, line 692
def _reduce_none(val, _values, result)
  val[0]
end
next_token() click to toggle source
# File lib/epub/cfi/parser.rb, line 28
def next_token
  return [false, false] if @scanner.eos?

  case
  when @scanner.scan(/[1-9]/)
    [:DIGIT_NON_ZERO, @scanner[0]]
  when @scanner.scan(/0/)
    [:ZERO, @scanner[0]]
  when @scanner.scan(/ /)
    [:SPACE, @scanner[0]]
  when @scanner.scan(/\^/)
    [:CIRCUMFLEX, @scanner[0]]
  when @scanner.scan(/\[/)
    [:OPENING_SQUARE_BRACKET, @scanner[0]]
  when @scanner.scan(/\]/)
    [:CLOSING_SQUARE_BRACKET, @scanner[0]]
  when @scanner.scan(/\(/)
    [:OPENING_PARENTHESIS, @scanner[0]]
  when @scanner.scan(/\)/)
    [:CLOSING_PARENTHESIS, @scanner[0]]
  when @scanner.scan(/,/)
    [:COMMA, @scanner[0]]
  when @scanner.scan(/;/)
    [:SEMICOLON, @scanner[0]]
  when @scanner.scan(/=/)
    [:EQUAL, @scanner[0]]
  when @scanner.scan(/\./)
    [:DOT, @scanner[0]]
  when @scanner.scan(/:/)
    [:COLON, @scanner[0]]
  when @scanner.scan(/~/)
    [:TILDE, @scanner[0]]
  when @scanner.scan(/@/)
    [:ATMARK, @scanner[0]]
  when @scanner.scan(/\//)
    [:SOLIDUS, @scanner[0]]
  when @scanner.scan(/!/)
    [:EXCLAMATION_MARK, @scanner[0]]
  when @scanner.scan(UNICODE_CHARACTER_EXCLUDING_SPECIAL_CHARS_AND_SPACE_AND_DOT_AND_COLON_AND_TILDE_AND_ATMARK_AND_SOLIDUS_AND_EXCLAMATION_MARK_PATTERN)
    [:UNICODE_CHARACTER_EXCLUDING_SPECIAL_CHARS_AND_SPACE_AND_DOT_AND_COLON_AND_TILDE_AND_ATMARK_AND_SOLIDUS_AND_EXCLAMATION_MARK, @scanner[0]]
  else
    raise 'unexpected character'
  end
end
parse(string) click to toggle source
# File lib/epub/cfi/parser.rb, line 20
def parse(string)
  if string.start_with? 'epubcfi('
    string = string['epubcfi('.length .. -2]
  end
  @scanner = StringScanner.new(string, true)
  do_parse
end