"Fossies" - the Fresh Open Source Software Archive

Member "selenium-selenium-4.8.1/rake_tasks/crazy_fun/main.rb" (17 Feb 2023, 2859 Bytes) of package /linux/www/selenium-selenium-4.8.1.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) Ruby source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file.

    1 require 'rake_tasks/crazy_fun/build_grammar'
    2 
    3 class OutputType
    4   attr_accessor :name
    5   attr_reader :args
    6 
    7   def initialize
    8     @args = {}
    9   end
   10 
   11   def push(value)
   12     if value.is_a? NameType
   13       @name = value.to_native
   14     elsif value.is_a? ArgType
   15       @args[value.key] = value.value
   16     end
   17   end
   18 
   19   def [](key)
   20     @args[key]
   21   end
   22 
   23   def length
   24     @args.length
   25   end
   26 
   27   def to_s
   28     str = "#{@name}(\n"
   29     @args.each do |arg|
   30       str << "    :#{arg[0]} => "
   31       if arg[1].is_a? Symbol
   32         str << ":#{arg[1]}"
   33       elsif arg[1].is_a? String
   34         str << '"' + arg[1] + '"'
   35       elsif arg[1].is_a? Array
   36         str << "[ "
   37         arg[1].each do |item|
   38           if item.is_a? Symbol
   39             str << ":#{item}"
   40           elsif item.is_a? String
   41             str << '"' + item + '"'
   42           end
   43           str << ", "
   44         end
   45         str << " ]"
   46       end
   47 
   48       str << ",\n"
   49     end
   50     str << ")"
   51     str
   52   end
   53 end
   54 
   55 class StringType
   56   def initialize
   57     @data = ""
   58   end
   59 
   60   def <<(data)
   61     @data << data
   62   end
   63 
   64   def to_native
   65     @data
   66   end
   67 end
   68 
   69 class SymbolType < StringType
   70   def to_native
   71     @data.to_sym
   72   end
   73 end
   74 
   75 class NameType < StringType; end
   76 
   77 class ArrayType
   78   def initialize
   79     @ary = []
   80   end
   81 
   82   def push(value)
   83     @ary.push value.to_native
   84   end
   85 
   86   def to_native
   87     @ary
   88   end
   89 end
   90 
   91 class MapEntry
   92   attr_accessor :key, :value
   93 
   94   def push(value)
   95     if @read_key
   96       @value = value.to_native
   97     else
   98       @key = value.to_native
   99       @read_key = true
  100     end
  101   end
  102 
  103   def to_native
  104     { @key => @value }
  105   end
  106 end
  107 
  108 class MapType
  109   def initialize
  110     @map = {}
  111   end
  112 
  113   def push(value)
  114     @map = @map.merge(value.to_native)
  115   end
  116 
  117   def to_native
  118     @map
  119   end
  120 end
  121 
  122 class ArgType < MapEntry; end
  123 
  124 class BuildFile
  125   attr :type
  126   attr_reader :types
  127   attr_accessor :debug
  128 
  129   def initialize
  130     @lhs = []
  131     @types = []
  132   end
  133 
  134   def leave
  135     # Get the top of the stack, pop it, then push the old top into the new.
  136     current = @lhs[-1]
  137     @lhs.pop
  138 
  139     if current.is_a? OutputType
  140       @types.push(current)
  141     elsif !@lhs[-1].nil?
  142       @lhs[-1].push(current)
  143     end
  144 
  145     puts "Leaving #{current}" if @debug
  146   end
  147 
  148   def parse_file(file_name)
  149     @file_name = file_name
  150     data = IO.read(file_name)
  151     parse(data)
  152   end
  153 
  154   def show_bad_line
  155     line = 1
  156     column = 1
  157     current_line = ""
  158 
  159     for n in 0 ... @p
  160       char = @data[n].chr
  161 
  162       if char == "\n"
  163         line += 1
  164         column = 1
  165         current_line = ""
  166       else
  167         column += 1
  168         current_line << char
  169       end
  170     end
  171 
  172     n += 1
  173 
  174     while @data[n] && @data[n].chr != "\n"
  175       current_line << @data[n].chr
  176       n += 1
  177     end
  178 
  179     error_msg = "Parse error (#{line}, #{column}) "
  180     error_msg << "in file '#{@file_name}'" unless @file_name.nil?
  181     error_msg << "\n\n #{current_line}"
  182 
  183     error_msg
  184   end
  185 end