Help File Extraction and Processing

Extracting CHM Help Files

require 'cabriolet'

# Extract CHM help file
chm = Cabriolet::CHM::Parser.new.parse('manual.chm')

chm.files.each do |file|
  next unless file.name.end_with?('.html', '.htm')

  output_path = "docs/#{file.name}"
  FileUtils.mkdir_p(File.dirname(output_path))
  File.write(output_path, file.data, mode: 'wb')
end

puts "Extracted #{chm.files.count} files"

Converting HLP to HTML

# Extract Windows Help file
hlp = Cabriolet::HLP::Parser.new.parse('help.hlp')

hlp.topics.each do |topic|
  html = convert_rtf_to_html(topic.content)
  File.write("output/#{topic.id}.html", html)
end

Batch Documentation Extraction

# Process all CHM files in directory
Dir.glob('help/*.chm').each do |chm_file|
  chm = Cabriolet::CHM::Parser.new.parse(chm_file)
  output_dir = "extracted/#{File.basename(chm_file, '.chm')}"

  chm.files.each do |file|
    path = File.join(output_dir, file.name)
    FileUtils.mkdir_p(File.dirname(path))
    File.write(path, file.data, mode: 'wb')
  end
end