Module: JSON5::ASCIIClassification

Defined in:
lib/json5/ascii_classification.rb

Constant Summary collapse

WHITESPACE =
1 << 0
DIGIT =
1 << 1
HEX_DIGIT =
1 << 2
IDENTIFIER_START =
1 << 3
IDENTIFIER_PART =
1 << 4
QUOTE =
1 << 5
PUNCTUATOR =
1 << 6
SLASH =
1 << 7
BACKSLASH =
1 << 8
LINE_TERMINATOR =
1 << 9
TABLE =
Array.new(256, 0).tap do |table|
  [0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x20].each { |byte| table[byte] |= WHITESPACE }
  (0x30..0x39).each { |byte| table[byte] |= DIGIT | HEX_DIGIT | IDENTIFIER_PART }
  (0x41..0x46).each { |byte| table[byte] |= HEX_DIGIT }
  (0x61..0x66).each { |byte| table[byte] |= HEX_DIGIT }
  (0x41..0x5a).each { |byte| table[byte] |= IDENTIFIER_START | IDENTIFIER_PART }
  (0x61..0x7a).each { |byte| table[byte] |= IDENTIFIER_START | IDENTIFIER_PART }
  [0x24, 0x5f].each { |byte| table[byte] |= IDENTIFIER_START | IDENTIFIER_PART }
  [0x22, 0x27].each { |byte| table[byte] |= QUOTE }
  [0x7b, 0x7d, 0x5b, 0x5d, 0x3a, 0x2c].each { |byte| table[byte] |= PUNCTUATOR }
  table[0x2f] |= SLASH
  table[0x5c] |= BACKSLASH
  [0x0a, 0x0d].each { |byte| table[byte] |= LINE_TERMINATOR }
end.freeze