cabriolet 0.2.2 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/cabriolet/algorithm_factory.rb +2 -2
- data/lib/cabriolet/base_compressor.rb +6 -6
- data/lib/cabriolet/binary/bitstream.rb +56 -6
- data/lib/cabriolet/cab/decompressor.rb +10 -7
- data/lib/cabriolet/cab/extractor.rb +49 -21
- data/lib/cabriolet/cab/parser.rb +3 -0
- data/lib/cabriolet/checksum.rb +7 -4
- data/lib/cabriolet/cli.rb +4 -4
- data/lib/cabriolet/compressors/lzx.rb +17 -9
- data/lib/cabriolet/compressors/mszip.rb +1 -1
- data/lib/cabriolet/decompressors/lzss.rb +22 -14
- data/lib/cabriolet/decompressors/lzx.rb +136 -24
- data/lib/cabriolet/decompressors/mszip.rb +36 -17
- data/lib/cabriolet/decompressors/quantum.rb +34 -36
- data/lib/cabriolet/file_manager.rb +4 -4
- data/lib/cabriolet/format_base.rb +4 -4
- data/lib/cabriolet/hlp/compressor.rb +2 -2
- data/lib/cabriolet/huffman/decoder.rb +8 -2
- data/lib/cabriolet/plugin.rb +2 -2
- data/lib/cabriolet/plugin_manager.rb +5 -5
- data/lib/cabriolet/streaming.rb +2 -2
- data/lib/cabriolet/system/file_handle.rb +1 -1
- data/lib/cabriolet/validator.rb +2 -2
- data/lib/cabriolet/version.rb +1 -1
- data/lib/cabriolet.rb +96 -98
- metadata +2 -2
data/lib/cabriolet/streaming.rb
CHANGED
|
@@ -188,9 +188,9 @@ module Cabriolet
|
|
|
188
188
|
# @param paths [Array<String>] Array of archive paths
|
|
189
189
|
# @yield [file, archive_path] Yields each file with its archive path
|
|
190
190
|
# @return [Hash] Processing statistics
|
|
191
|
-
def process_archives(paths, &
|
|
191
|
+
def process_archives(paths, &)
|
|
192
192
|
paths.each do |path|
|
|
193
|
-
process_archive(path, &
|
|
193
|
+
process_archive(path, &)
|
|
194
194
|
end
|
|
195
195
|
|
|
196
196
|
@stats
|
|
@@ -98,7 +98,7 @@ module Cabriolet
|
|
|
98
98
|
raise ArgumentError, "Invalid mode: #{mode}"
|
|
99
99
|
end
|
|
100
100
|
|
|
101
|
-
::File.open(@filename, file_mode)
|
|
101
|
+
::File.open(@filename, file_mode) # rubocop:disable Style/FileOpen -- lifecycle managed by close/closed?
|
|
102
102
|
rescue Errno::ENOENT, Errno::EACCES => e
|
|
103
103
|
raise IOError, "Cannot open file #{@filename}: #{e.message}"
|
|
104
104
|
end
|
data/lib/cabriolet/validator.rb
CHANGED
data/lib/cabriolet/version.rb
CHANGED
data/lib/cabriolet.rb
CHANGED
|
@@ -65,101 +65,99 @@ module Cabriolet
|
|
|
65
65
|
# Default buffer size of 64KB - better for modern systems
|
|
66
66
|
# Larger buffers reduce I/O syscall overhead significantly
|
|
67
67
|
self.default_buffer_size = 65_536
|
|
68
|
-
end
|
|
69
68
|
|
|
70
|
-
# Models
|
|
71
|
-
require_relative "cabriolet/models/cabinet"
|
|
72
|
-
require_relative "cabriolet/models/folder"
|
|
73
|
-
require_relative "cabriolet/models/folder_data"
|
|
74
|
-
require_relative "cabriolet/models/file"
|
|
75
|
-
require_relative "cabriolet/models/chm_header"
|
|
76
|
-
require_relative "cabriolet/models/chm_section"
|
|
77
|
-
require_relative "cabriolet/models/chm_file"
|
|
78
|
-
require_relative "cabriolet/models/szdd_header"
|
|
79
|
-
require_relative "cabriolet/models/kwaj_header"
|
|
80
|
-
require_relative "cabriolet/models/hlp_header"
|
|
81
|
-
require_relative "cabriolet/models/hlp_file"
|
|
82
|
-
require_relative "cabriolet/models/winhelp_header"
|
|
83
|
-
require_relative "cabriolet/models/lit_header"
|
|
84
|
-
require_relative "cabriolet/models/oab_header"
|
|
85
|
-
|
|
86
|
-
# Load errors first (needed by algorithm_factory)
|
|
87
|
-
|
|
88
|
-
# Load plugin system
|
|
89
|
-
require_relative "cabriolet/plugin"
|
|
90
|
-
require_relative "cabriolet/plugin_validator"
|
|
91
|
-
require_relative "cabriolet/plugin_manager"
|
|
92
|
-
|
|
93
|
-
# Load algorithm factory
|
|
94
|
-
require_relative "cabriolet/algorithm_factory"
|
|
95
|
-
|
|
96
|
-
# Load core components
|
|
97
|
-
|
|
98
|
-
require_relative "cabriolet/quantum_shared"
|
|
99
|
-
|
|
100
|
-
require_relative "cabriolet/huffman/tree"
|
|
101
|
-
require_relative "cabriolet/huffman/decoder"
|
|
102
|
-
require_relative "cabriolet/huffman/encoder"
|
|
103
|
-
|
|
104
|
-
require_relative "cabriolet/decompressors/base"
|
|
105
|
-
require_relative "cabriolet/decompressors/none"
|
|
106
|
-
require_relative "cabriolet/decompressors/lzss"
|
|
107
|
-
require_relative "cabriolet/decompressors/mszip"
|
|
108
|
-
require_relative "cabriolet/decompressors/lzx"
|
|
109
|
-
require_relative "cabriolet/decompressors/quantum"
|
|
110
|
-
|
|
111
|
-
require_relative "cabriolet/compressors/base"
|
|
112
|
-
require_relative "cabriolet/compressors/lzss"
|
|
113
|
-
require_relative "cabriolet/compressors/mszip"
|
|
114
|
-
require_relative "cabriolet/compressors/lzx"
|
|
115
|
-
require_relative "cabriolet/compressors/quantum"
|
|
116
|
-
|
|
117
|
-
require_relative "cabriolet/cab/parser"
|
|
118
|
-
require_relative "cabriolet/cab/decompressor"
|
|
119
|
-
require_relative "cabriolet/cab/extractor"
|
|
120
|
-
require_relative "cabriolet/cab/compressor"
|
|
121
|
-
|
|
122
|
-
require_relative "cabriolet/chm/parser"
|
|
123
|
-
require_relative "cabriolet/chm/decompressor"
|
|
124
|
-
require_relative "cabriolet/chm/compressor"
|
|
125
|
-
|
|
126
|
-
require_relative "cabriolet/szdd/parser"
|
|
127
|
-
require_relative "cabriolet/szdd/decompressor"
|
|
128
|
-
require_relative "cabriolet/szdd/compressor"
|
|
129
|
-
|
|
130
|
-
require_relative "cabriolet/kwaj/parser"
|
|
131
|
-
require_relative "cabriolet/kwaj/decompressor"
|
|
132
|
-
require_relative "cabriolet/kwaj/compressor"
|
|
133
|
-
|
|
134
|
-
require_relative "cabriolet/hlp/parser"
|
|
135
|
-
require_relative "cabriolet/hlp/decompressor"
|
|
136
|
-
require_relative "cabriolet/hlp/compressor"
|
|
137
|
-
|
|
138
|
-
require_relative "cabriolet/hlp/winhelp/parser"
|
|
139
|
-
require_relative "cabriolet/hlp/winhelp/zeck_lz77"
|
|
140
|
-
require_relative "cabriolet/hlp/winhelp/decompressor"
|
|
141
|
-
require_relative "cabriolet/hlp/winhelp/compressor"
|
|
142
|
-
|
|
143
|
-
require_relative "cabriolet/lit/decompressor"
|
|
144
|
-
require_relative "cabriolet/lit/compressor"
|
|
145
|
-
|
|
146
|
-
require_relative "cabriolet/oab/decompressor"
|
|
147
|
-
require_relative "cabriolet/oab/compressor"
|
|
148
|
-
|
|
149
|
-
# Load new advanced features
|
|
150
|
-
require_relative "cabriolet/format_detector"
|
|
151
|
-
require_relative "cabriolet/extraction/base_extractor"
|
|
152
|
-
require_relative "cabriolet/extraction/extractor"
|
|
153
|
-
require_relative "cabriolet/streaming"
|
|
154
|
-
require_relative "cabriolet/validator"
|
|
155
|
-
require_relative "cabriolet/repairer"
|
|
156
|
-
require_relative "cabriolet/modifier"
|
|
157
|
-
|
|
158
|
-
# Load CLI (optional, for command-line usage)
|
|
159
|
-
require_relative "cabriolet/cli"
|
|
160
|
-
|
|
161
|
-
# Convenience methods
|
|
162
|
-
module Cabriolet
|
|
69
|
+
# Models
|
|
70
|
+
require_relative "cabriolet/models/cabinet"
|
|
71
|
+
require_relative "cabriolet/models/folder"
|
|
72
|
+
require_relative "cabriolet/models/folder_data"
|
|
73
|
+
require_relative "cabriolet/models/file"
|
|
74
|
+
require_relative "cabriolet/models/chm_header"
|
|
75
|
+
require_relative "cabriolet/models/chm_section"
|
|
76
|
+
require_relative "cabriolet/models/chm_file"
|
|
77
|
+
require_relative "cabriolet/models/szdd_header"
|
|
78
|
+
require_relative "cabriolet/models/kwaj_header"
|
|
79
|
+
require_relative "cabriolet/models/hlp_header"
|
|
80
|
+
require_relative "cabriolet/models/hlp_file"
|
|
81
|
+
require_relative "cabriolet/models/winhelp_header"
|
|
82
|
+
require_relative "cabriolet/models/lit_header"
|
|
83
|
+
require_relative "cabriolet/models/oab_header"
|
|
84
|
+
|
|
85
|
+
# Load errors first (needed by algorithm_factory)
|
|
86
|
+
|
|
87
|
+
# Load plugin system
|
|
88
|
+
require_relative "cabriolet/plugin"
|
|
89
|
+
require_relative "cabriolet/plugin_validator"
|
|
90
|
+
require_relative "cabriolet/plugin_manager"
|
|
91
|
+
|
|
92
|
+
# Load algorithm factory
|
|
93
|
+
require_relative "cabriolet/algorithm_factory"
|
|
94
|
+
|
|
95
|
+
# Load core components
|
|
96
|
+
|
|
97
|
+
require_relative "cabriolet/quantum_shared"
|
|
98
|
+
|
|
99
|
+
require_relative "cabriolet/huffman/tree"
|
|
100
|
+
require_relative "cabriolet/huffman/decoder"
|
|
101
|
+
require_relative "cabriolet/huffman/encoder"
|
|
102
|
+
|
|
103
|
+
require_relative "cabriolet/decompressors/base"
|
|
104
|
+
require_relative "cabriolet/decompressors/none"
|
|
105
|
+
require_relative "cabriolet/decompressors/lzss"
|
|
106
|
+
require_relative "cabriolet/decompressors/mszip"
|
|
107
|
+
require_relative "cabriolet/decompressors/lzx"
|
|
108
|
+
require_relative "cabriolet/decompressors/quantum"
|
|
109
|
+
|
|
110
|
+
require_relative "cabriolet/compressors/base"
|
|
111
|
+
require_relative "cabriolet/compressors/lzss"
|
|
112
|
+
require_relative "cabriolet/compressors/mszip"
|
|
113
|
+
require_relative "cabriolet/compressors/lzx"
|
|
114
|
+
require_relative "cabriolet/compressors/quantum"
|
|
115
|
+
|
|
116
|
+
require_relative "cabriolet/cab/parser"
|
|
117
|
+
require_relative "cabriolet/cab/decompressor"
|
|
118
|
+
require_relative "cabriolet/cab/extractor"
|
|
119
|
+
require_relative "cabriolet/cab/compressor"
|
|
120
|
+
|
|
121
|
+
require_relative "cabriolet/chm/parser"
|
|
122
|
+
require_relative "cabriolet/chm/decompressor"
|
|
123
|
+
require_relative "cabriolet/chm/compressor"
|
|
124
|
+
|
|
125
|
+
require_relative "cabriolet/szdd/parser"
|
|
126
|
+
require_relative "cabriolet/szdd/decompressor"
|
|
127
|
+
require_relative "cabriolet/szdd/compressor"
|
|
128
|
+
|
|
129
|
+
require_relative "cabriolet/kwaj/parser"
|
|
130
|
+
require_relative "cabriolet/kwaj/decompressor"
|
|
131
|
+
require_relative "cabriolet/kwaj/compressor"
|
|
132
|
+
|
|
133
|
+
require_relative "cabriolet/hlp/parser"
|
|
134
|
+
require_relative "cabriolet/hlp/decompressor"
|
|
135
|
+
require_relative "cabriolet/hlp/compressor"
|
|
136
|
+
|
|
137
|
+
require_relative "cabriolet/hlp/winhelp/parser"
|
|
138
|
+
require_relative "cabriolet/hlp/winhelp/zeck_lz77"
|
|
139
|
+
require_relative "cabriolet/hlp/winhelp/decompressor"
|
|
140
|
+
require_relative "cabriolet/hlp/winhelp/compressor"
|
|
141
|
+
|
|
142
|
+
require_relative "cabriolet/lit/decompressor"
|
|
143
|
+
require_relative "cabriolet/lit/compressor"
|
|
144
|
+
|
|
145
|
+
require_relative "cabriolet/oab/decompressor"
|
|
146
|
+
require_relative "cabriolet/oab/compressor"
|
|
147
|
+
|
|
148
|
+
# Load new advanced features
|
|
149
|
+
require_relative "cabriolet/format_detector"
|
|
150
|
+
require_relative "cabriolet/extraction/base_extractor"
|
|
151
|
+
require_relative "cabriolet/extraction/extractor"
|
|
152
|
+
require_relative "cabriolet/streaming"
|
|
153
|
+
require_relative "cabriolet/validator"
|
|
154
|
+
require_relative "cabriolet/repairer"
|
|
155
|
+
require_relative "cabriolet/modifier"
|
|
156
|
+
|
|
157
|
+
# Load CLI (optional, for command-line usage)
|
|
158
|
+
require_relative "cabriolet/cli"
|
|
159
|
+
|
|
160
|
+
# Convenience methods
|
|
163
161
|
class << self
|
|
164
162
|
# Open and parse an archive with automatic format detection
|
|
165
163
|
#
|
|
@@ -171,7 +169,7 @@ module Cabriolet
|
|
|
171
169
|
# @example
|
|
172
170
|
# archive = Cabriolet.open('unknown.archive')
|
|
173
171
|
# archive.files.each { |f| puts f.name }
|
|
174
|
-
def open(path, **
|
|
172
|
+
def open(path, **)
|
|
175
173
|
parser_class = FormatDetector.parser_for(path)
|
|
176
174
|
|
|
177
175
|
unless parser_class
|
|
@@ -180,7 +178,7 @@ module Cabriolet
|
|
|
180
178
|
"Unable to detect format or no parser available for: #{path} (detected: #{format || 'unknown'})"
|
|
181
179
|
end
|
|
182
180
|
|
|
183
|
-
parser_class.new(**
|
|
181
|
+
parser_class.new(**).parse(path)
|
|
184
182
|
end
|
|
185
183
|
|
|
186
184
|
# Detect format of an archive file
|
|
@@ -211,9 +209,9 @@ module Cabriolet
|
|
|
211
209
|
# @example Parallel extraction with 8 workers
|
|
212
210
|
# stats = Cabriolet.extract('file.chm', 'docs/', workers: 8)
|
|
213
211
|
# puts "Extracted #{stats[:extracted]} files"
|
|
214
|
-
def extract(archive_path, output_dir, **
|
|
212
|
+
def extract(archive_path, output_dir, **)
|
|
215
213
|
archive = open(archive_path)
|
|
216
|
-
extractor = Extraction::Extractor.new(archive, output_dir, **
|
|
214
|
+
extractor = Extraction::Extractor.new(archive, output_dir, **)
|
|
217
215
|
extractor.extract_all
|
|
218
216
|
end
|
|
219
217
|
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: cabriolet
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ribose Inc.
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-
|
|
11
|
+
date: 2026-03-18 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bindata
|