summaryrefslogtreecommitdiff
path: root/ruby_2_2/ext/psych/lib/psych/scalar_scanner.rb
diff options
context:
space:
mode:
Diffstat (limited to 'ruby_2_2/ext/psych/lib/psych/scalar_scanner.rb')
-rw-r--r--ruby_2_2/ext/psych/lib/psych/scalar_scanner.rb149
1 files changed, 0 insertions, 149 deletions
diff --git a/ruby_2_2/ext/psych/lib/psych/scalar_scanner.rb b/ruby_2_2/ext/psych/lib/psych/scalar_scanner.rb
deleted file mode 100644
index 93007902a7..0000000000
--- a/ruby_2_2/ext/psych/lib/psych/scalar_scanner.rb
+++ /dev/null
@@ -1,149 +0,0 @@
-require 'strscan'
-
-module Psych
- ###
- # Scan scalars for built in types
- class ScalarScanner
- # Taken from http://yaml.org/type/timestamp.html
- TIME = /^-?\d{4}-\d{1,2}-\d{1,2}(?:[Tt]|\s+)\d{1,2}:\d\d:\d\d(?:\.\d*)?(?:\s*(?:Z|[-+]\d{1,2}:?(?:\d\d)?))?$/
-
- # Taken from http://yaml.org/type/float.html
- FLOAT = /^(?:[-+]?([0-9][0-9_,]*)?\.[0-9]*([eE][-+][0-9]+)?(?# base 10)
- |[-+]?[0-9][0-9_,]*(:[0-5]?[0-9])+\.[0-9_]*(?# base 60)
- |[-+]?\.(inf|Inf|INF)(?# infinity)
- |\.(nan|NaN|NAN)(?# not a number))$/x
-
- # Taken from http://yaml.org/type/int.html
- INTEGER = /^(?:[-+]?0b[0-1_]+ (?# base 2)
- |[-+]?0[0-7_]+ (?# base 8)
- |[-+]?(?:0|[1-9][0-9_]*) (?# base 10)
- |[-+]?0x[0-9a-fA-F_]+ (?# base 16))$/x
-
- attr_reader :class_loader
-
- # Create a new scanner
- def initialize class_loader
- @string_cache = {}
- @symbol_cache = {}
- @class_loader = class_loader
- end
-
- # Tokenize +string+ returning the Ruby object
- def tokenize string
- return nil if string.empty?
- return string if @string_cache.key?(string)
- return @symbol_cache[string] if @symbol_cache.key?(string)
-
- case string
- # Check for a String type, being careful not to get caught by hash keys, hex values, and
- # special floats (e.g., -.inf).
- when /^[^\d\.:-]?[A-Za-z_\s!@#\$%\^&\*\(\)\{\}\<\>\|\/\\~;=]+/, /\n/
- if string.length > 5
- @string_cache[string] = true
- return string
- end
-
- case string
- when /^[^ytonf~]/i
- @string_cache[string] = true
- string
- when '~', /^null$/i
- nil
- when /^(yes|true|on)$/i
- true
- when /^(no|false|off)$/i
- false
- else
- @string_cache[string] = true
- string
- end
- when TIME
- begin
- parse_time string
- rescue ArgumentError
- string
- end
- when /^\d{4}-(?:1[012]|0\d|\d)-(?:[12]\d|3[01]|0\d|\d)$/
- require 'date'
- begin
- class_loader.date.strptime(string, '%Y-%m-%d')
- rescue ArgumentError
- string
- end
- when /^\.inf$/i
- Float::INFINITY
- when /^-\.inf$/i
- -Float::INFINITY
- when /^\.nan$/i
- Float::NAN
- when /^:./
- if string =~ /^:(["'])(.*)\1/
- @symbol_cache[string] = class_loader.symbolize($2.sub(/^:/, ''))
- else
- @symbol_cache[string] = class_loader.symbolize(string.sub(/^:/, ''))
- end
- when /^[-+]?[0-9][0-9_]*(:[0-5]?[0-9])+$/
- i = 0
- string.split(':').each_with_index do |n,e|
- i += (n.to_i * 60 ** (e - 2).abs)
- end
- i
- when /^[-+]?[0-9][0-9_]*(:[0-5]?[0-9])+\.[0-9_]*$/
- i = 0
- string.split(':').each_with_index do |n,e|
- i += (n.to_f * 60 ** (e - 2).abs)
- end
- i
- when FLOAT
- if string =~ /\A[-+]?\.\Z/
- @string_cache[string] = true
- string
- else
- Float(string.gsub(/[,_]|\.$/, ''))
- end
- else
- int = parse_int string.gsub(/[,_]/, '')
- return int if int
-
- @string_cache[string] = true
- string
- end
- end
-
- ###
- # Parse and return an int from +string+
- def parse_int string
- return unless INTEGER === string
- Integer(string)
- end
-
- ###
- # Parse and return a Time from +string+
- def parse_time string
- klass = class_loader.load 'Time'
-
- date, time = *(string.split(/[ tT]/, 2))
- (yy, m, dd) = date.match(/^(-?\d{4})-(\d{1,2})-(\d{1,2})/).captures.map { |x| x.to_i }
- md = time.match(/(\d+:\d+:\d+)(?:\.(\d*))?\s*(Z|[-+]\d+(:\d\d)?)?/)
-
- (hh, mm, ss) = md[1].split(':').map { |x| x.to_i }
- us = (md[2] ? Rational("0.#{md[2]}") : 0) * 1000000
-
- time = klass.utc(yy, m, dd, hh, mm, ss, us)
-
- return time if 'Z' == md[3]
- return klass.at(time.to_i, us) unless md[3]
-
- tz = md[3].match(/^([+\-]?\d{1,2})\:?(\d{1,2})?$/)[1..-1].compact.map { |digit| Integer(digit, 10) }
- offset = tz.first * 3600
-
- if offset < 0
- offset -= ((tz[1] || 0) * 60)
- else
- offset += ((tz[1] || 0) * 60)
- end
-
- klass.at((time - offset).to_i, us)
- end
- end
-end