Class: Cabriolet::HLP::WinHelp::Parser

Inherits:
Object
  • Object
show all
Defined in:
lib/cabriolet/hlp/winhelp/parser.rb

Overview

Parser for Windows Help (WinHelp) files

Parses Windows Help files (3.x and 4.x formats) used in Windows 3.0+ through Windows XP.

Format structure:

  • File Header (28 or 32 bytes depending on version)

  • Internal File Directory

  • File Data Blocks (|SYSTEM, |TOPIC, etc.)

Magic numbers:

  • WinHelp 3.x (16-bit): 0x35F3

  • WinHelp 4.x (32-bit): 0x3F5F0000 (varies)

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(io_system = nil) ⇒ Parser

Initialize parser

Parameters:

  • io_system (System::IOSystem, nil) (defaults to: nil)

    Custom I/O system or nil for default



31
32
33
# File 'lib/cabriolet/hlp/winhelp/parser.rb', line 31

def initialize(io_system = nil)
  @io_system = io_system || System::IOSystem.new
end

Instance Attribute Details

#io_systemObject (readonly)

Returns the value of attribute io_system.



26
27
28
# File 'lib/cabriolet/hlp/winhelp/parser.rb', line 26

def io_system
  @io_system
end

Instance Method Details

#parse(filename) ⇒ Models::WinHelpHeader

Parse a WinHelp file

Parameters:

  • filename (String)

    Path to WinHelp file

Returns:

Raises:



40
41
42
43
44
45
46
47
48
49
50
# File 'lib/cabriolet/hlp/winhelp/parser.rb', line 40

def parse(filename)
  handle = @io_system.open(filename, Constants::MODE_READ)

  begin
    header = parse_file(handle)
    header.filename = filename
    header
  ensure
    @io_system.close(handle)
  end
end