require 'nokogiri' require 'open-uri' require 'zomg' require 'active_support/all' # http://w3c-test.org/webperf/specs/NavigationTiming no longer available # archived https://web.archive.org/web/20110322032757/http://w3c-test.org/webperf/specs/NavigationTiming/ w3c_nav = 'https://www.w3.org/TR/navigation-timing-2/' w3c_nav = 'https://web.archive.org/web/20110322032757/http://w3c-test.org/webperf/specs/NavigationTiming/' doc = Nokogiri::HTML(URI.open(w3c_nav)) idl = [] doc.css('pre.idl').each { |content| idl << content.text } nodes = [] idl.each do |spec| puts spec.inspect puts '----' #spec = spec.gsub('[Exposed=Window]', '') nodes << ZOMG::IDL.parse(spec) unless ZOMG::IDL.parse(spec).nil? end results = {} results[:class] = 'Performance' results[:interfaces] = {} nodes.each do |node| interface_name = node.children.first.header.name.gsub('Performance', '') results[:interfaces][interface_name] = {} results[:interfaces][interface_name][:attrs] = [] results[:interfaces][interface_name][:constants] = {} node.children.first.children.each do |child| case child.class.to_s when 'ZOMG::IDL::Nodes::Attribute' results[:interfaces][interface_name][:attrs] << child.children.first.name.underscore when 'ZOMG::IDL::Nodes::Constant' consts = results[:interfaces][interface_name][:constants] consts[child.name] = child.children.children end end end open(File.expand_path(File.dirname(__FILE__)) + "/#{results[:class].underscore}.rb", 'w') do |f| f.puts '# auto-generated by idl_extractor.rb' f.puts "class #{results[:class]}" results[:interfaces].each_key do |interface_name| f.puts ' ' * 2 + "class #{interface_name}" results[:interfaces][interface_name][:constants].each do |k, v| f.puts ' ' * 4 + "#{k} = #{v.to_i}" end f.puts ' ' * 4 + 'attr_reader ' + results[:interfaces][interface_name][:attrs].collect! {|x| ":"+x}.join(", ") f.puts <<-'eos' def initialize(args) args.each do |k,v| instance_variable_set("@#{k}", v) if respond_to?(k.to_sym) unless v.nil? end end eos f.puts ' ' * 2 + 'end' end f.puts 'end' end