#!/usr/bin/env ruby require 'nokogiri' def base_dir File.dirname(__FILE__) end def output_directory File.join(base_dir, 'idl') end def specification file = File.open(File.join(base_dir, 'specification.html')) doc = Nokogiri::XML(file) file.close doc end def write_node_inner_text_to_file(filename, node) File.open(filename, 'w') { |file| file.write(node.inner_text.strip) } puts "Wrote: #{filename}" end def load_idl(id) file = File.join(output_directory, id) return false if !File.exist?(file) File.read(file) end # Parse the specification writing each block of idl to its own file specification.css(".idl-code").each do |idl_block| id = idl_block["id"] write_node_inner_text_to_file(File.join(output_directory, id), idl_block) if id end # Update the idl in the pre blocks for each idl test idl_test_files = [ File.join(base_dir, 'the-audio-api', 'the-gainnode-interface', 'idl-test.html'), File.join(base_dir, 'the-audio-api', 'the-audiodestinationnode-interface', 'idl-test.html'), File.join(base_dir, 'the-audio-api', 'the-delaynode-interface', 'idl-test.html'), File.join(base_dir, 'the-audio-api', 'the-audiobuffer-interface', 'idl-test.html'), ] idl_test_files.each do |fn| file = File.open(fn) doc = Nokogiri::HTML(file) file.close doc.css('pre').each do |node| node_id = node["id"] if idl = load_idl(node_id) node.content = idl end end File.open(fn, 'w') { |file| file.write(doc.to_html)} end