class Uga_Uga
Constants
- NEW_LINE_REGEXP
- NOTHING
- ONE_OR_MORE_SPACES
- REX
- REX_CACHE
- ZERO_OR_MORE_SPACES
Attributes
captures[R]
line_num[R]
parent[R]
stack[R]
Public Class Methods
clean(arg)
click to toggle source
This method is used mainly used in tests/specs to remove the “noise” (whitespace, empty lines, etc) during parsing.
# File lib/uga_uga.rb, line 27 def clean arg case arg when String str = arg.strip return nil if str.empty? str when Array arg.map { |unknown| clean unknown }.compact else arg end end
new(str_or_arr = nil, *args)
click to toggle source
# File lib/uga_uga.rb, line 106 def initialize str_or_arr = nil, *args @origin = str_or_arr @instruct = block_given? ? Proc.new : nil @stack = [] @captures = nil @parent = nil file_or_number = nil args.each { |o| case o when Uga_Uga @parent = o file_or_number ||= o.line_num when Numeric file_or_number = o when String file_or_number = o else fail ArgumentError, "Unknown argument: #{o.inspect}" end } return unless @origin if str_or_arr.is_a?(String) str = str_or_arr @lines = str_or_arr.split(NEW_LINE_REGEXP) else str = nil @lines = str_or_arr end @origin = str_or_arr @old = [] @line_num = if file_or_number.is_a? Numeric file_or_number else contents = File.read(file_or_number || __FILE__ ) index = contents.index(str || @lines.join("\n")) if index contents[0,index + 1].split("\n").size else 1 end end run end
reg_exp(str, *custom)
click to toggle source
# File lib/uga_uga.rb, line 44 def reg_exp str, *custom i = -1 base = str.scan(REX).map { |arr| case when arr[0] ONE_OR_MORE_SPACES when arr[1] key = arr[1].strip case key when '...' /\ *([^\)]+?)\ */ when '_' i += 1 fail ArgumentError, "NO value set for #{i.inspect} -> #{str.inspect}" unless custom[i] '(' + custom[i].to_s + ')' when 'word' /\ *([^\ \)]+)\ */ when 'white*' /([\ ]*)/ when 'white' /([\ ]+)/ when 'num' /\ *([0-9\.\_\-]+)\ */ when /\A![^\!]+/ /\ *([^#{Regexp.escape key.sub('!', '')}]+)\ */ else fail ArgumentError, "Unknown value for Regexp: #{arr[1].inspect} in #{str.inspect}" end # === case key when arr[2] Regexp.escape arr[2] else fail ArgumentError, "#{str.inspect} -> #{REG_EXP.inspect}" end # === case } if base.first == ONE_OR_MORE_SPACES base.shift base.unshift ZERO_OR_MORE_SPACES end if base.last == ONE_OR_MORE_SPACES base.pop base.push ZERO_OR_MORE_SPACES end /\A#{base.join}\Z/ end
Public Instance Methods
l!()
click to toggle source
# File lib/uga_uga.rb, line 168 def l! @lines.first end
rex?(str, *args)
click to toggle source
# File lib/uga_uga.rb, line 158 def rex? str, *args key = [str,args].to_s reg_exp = ( REX_CACHE[key] ||= Uga_Uga.reg_exp(str, *args) ) match = l!.match reg_exp @captures = match ? match.captures : nil !!match end