+++ /dev/null
-require 'nokogiri'
-require 'fileutils'
-require 'open-uri'
-
-URL = 'http://ardour.org/book/export/html/5848'
-FILENAME = 'drupal-export.html'
-
-WRITE = true
-DOWNLOAD_FILES = false
-GET_ARDOUR_ORG_IMAGES = false
-HANDLE_OTHER_IMAGES = false
-
-OUTPUT_DIR = '_manual'
-
-FILES_DIR = 'source'
-
-SLUG_MAPPINGS = {
- 'working_with_sessions' => 'sessions',
- 'export_stem' => 'export',
- 'track_groups' => 'track_bus_groups',
- 'vst_support' => 'windows_vst',
- 'kbd_default' => 'default_bindings',
- 'midistep_entry' => 'midi_step_entry',
- 'midi_stepentry' => 'midi_step_entry'
-}
-
-MISSING_SLUGS = %w(
- range_selection
- track_templates
- track_template
- color_dialog
- region_layering
- round_robin_inputs
- mcp_osx
- mcp_new_device
-)
-
-FILES_MAPPINGS = {
- '/files/a3_mnemonic_cheatsheet.pdf' => '/files/ardour-2.8.3-bindings-x.pdf',
- '/files/a3_mnemonic_cheat_sheet_osx.pdf' => '/files/ardour-2.8.3-bindings-osx-a4.pdf'
-}
-
-LINK_SLUG_TO_NODE_ID = {}
-
-def link_slug_to_node_id(slug)
-
- slug = SLUG_MAPPINGS[slug] || slug
-
- return nil if MISSING_SLUGS.include? slug
-
- LINK_SLUG_TO_NODE_ID[slug] ||= begin
- filename = "tmp/slug-to-node/#{slug}"
-
- if File.exists? filename
- File.read(filename).to_i
- else
- url = "http://ardour.org/manual/#{slug}"
- puts "opening #{url}"
- node_id = Nokogiri(open(url)).at('#content .node')['id'].sub(/^node\-/,'').to_i
- File.open(filename,'w+') { |f| f << node_id }
- node_id
- end
- end
-end
-
-
-def register_node(node_id, path)
- filename = "tmp/node-to-path/#{node_id}"
- File.open(filename,'w+') { |f| f << path } unless File.exists? filename
-end
-
-def node_id_to_path!(node_id)
- filename = "tmp/node-to-path/#{node_id}"
- return '' unless File.exists? filename
- #raise "no path for node-id #{node_id}" unless File.exists? filename
- File.read(filename)
-end
-
-def process(html, level = 1, path = [], numbered_path = [])
- html.search("div.section-#{level}").each_with_index do |child, i|
-
- title = child.at('h1.book-heading').inner_text
-
- node_id = child['id'].sub(/^node\-/,'')
-
-
- slug = title.downcase.gsub(' ','-').gsub(/[^a-z0-9\-]/, '')
-
- root = slug == 'the-ardour3-manual'
-
- if root
-
- # top level
-
- this_path = []
- this_numbered_path = []
- else
- numbered_slug = "%02d_%s" % [i + 1, slug, node_id]
-
- this_path = path + [slug]
- this_numbered_path = numbered_path + [numbered_slug]
- end
-
- register_node node_id, this_path.join('/')
-
- indent = ' ' * level * 3
-
- has_children = child.search("div.section-#{level + 1}").length > 0 #&& possible_children.any? { |child| child.search('div').length > 0 }
-
- output_dir = "#{OUTPUT_DIR}/#{this_numbered_path.join('/')}"
-
- output_file = case
- when root
- "#{OUTPUT_DIR}/blah.html"
- #when has_children
- # "#{output_dir}/index.html"
- else
- "#{output_dir}.html"
- end
-
- content = child.dup
-
- content.search('h1.book-heading').remove
- content.search("div.section-#{level + 1}").remove
-
- if heading = content.at('h2') and heading.inner_text == title
- heading.remove
- end
-
- #puts "processing links in [#{this_path.join('/')}]"
-
- content.search('a').each do |a|
- href = a['href']
- case href
- when /^\/manual\/(.*)/
- slug = $1
- if node_id = link_slug_to_node_id(slug)
- link_path = node_id_to_path! node_id
- #puts " link slug [#{slug}] -> #{node_id} -> #{link_path}"
- a['href'] = "/#{link_path}"
- else
- a['href'] = "/missing"
- end
-
- when /^(\/files\/.*)/
-
- if DOWNLOAD_FILES
- file_path = $1
-
-
- if FILES_MAPPINGS[file_path]
- file_path = FILES_MAPPINGS[file_path]
- a['href'] = file_path
- end
-
- puts "downloading [#{file_path}] (for #{this_path.join('/')})"
-
- filename = "#{FILES_DIR}/#{file_path}"
- FileUtils.mkdir_p File.dirname(filename)
- File.open(filename,'w+') { |f| f << open("http://ardour.org/#{file_path}").read }
- end
- end
- end
-
- content.search('img').each do |img|
-
- src = img['src']
-
- case src
- when /^\//
- if GET_ARDOUR_ORG_IMAGES
- url = "http://ardour.org#{src}"
- puts "getting #{url}"
- img_path = "#{FILES_DIR}#{src}"
- FileUtils.mkdir_p File.dirname(img_path)
- File.open(img_path, 'w+') { |f| f << open(url).read }
- end
- when /^http/
- new_src = '/' + src.sub(/^http:\/\/[^\/]+\//,'')
- img['src'] = new_src
-
- if HANDLE_OTHER_IMAGES
- puts "new_src: #{new_src}"
- img_path = "#{FILES_DIR}#{new_src}"
- FileUtils.mkdir_p File.dirname(img_path)
- puts "getting #{src}"
- File.open(img_path, 'w+') { |f| f << open(src).read }
- end
- end
-
- end
-
- if WRITE
- FileUtils.mkdir_p output_dir if has_children
- File.open(output_file, 'w:UTF-8') do |f|
- f << <<-HTML
----
-layout: default
-title: #{title}
----
-
-#{content.inner_html}
- HTML
-
- if has_children
- f << <<-HTML
-{% children %}
- HTML
- end
-
-
- end
- end
-
- process(child, level + 1, this_path, this_numbered_path)
- end
-end
-
-
-unless File.exists?(FILENAME)
- puts "downloading #{URL} to #{FILENAME}"
- File.open(FILENAME,'w+') { |f| f << open(URL).read }
-end
-
-FileUtils.mkdir_p('tmp/node-to-path')
-FileUtils.mkdir_p('tmp/slug-to-node')
-
-process Nokogiri(File.read(FILENAME))
-