omnizip 0.3.1
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 +7 -0
- data/.rspec +3 -0
- data/.rubocop.yml +32 -0
- data/.rubocop_todo.yml +754 -0
- data/COPYING +502 -0
- data/Gemfile +17 -0
- data/LICENSE +12 -0
- data/README.adoc +1045 -0
- data/Rakefile +12 -0
- data/benchmark/README.md +260 -0
- data/benchmark/benchmark_suite.rb +125 -0
- data/benchmark/compression_bench.rb +181 -0
- data/benchmark/filter_bench.rb +180 -0
- data/benchmark/models/benchmark_result.rb +59 -0
- data/benchmark/models/comparison_result.rb +69 -0
- data/benchmark/profile_suite.rb +167 -0
- data/benchmark/reporter.rb +150 -0
- data/benchmark/run_benchmarks.rb +66 -0
- data/benchmark/test_data.rb +137 -0
- data/config/formats/rar3_spec.yml +91 -0
- data/config/formats/rar5_spec.yml +102 -0
- data/docs/.github/workflows/docs.yml +142 -0
- data/docs/.gitignore +21 -0
- data/docs/.lychee.toml +67 -0
- data/docs/Gemfile +13 -0
- data/docs/RAR_WRITE_SUPPORT.md +26 -0
- data/docs/README.md +101 -0
- data/docs/_config.yml +112 -0
- data/docs/assets/logo.svg +1 -0
- data/docs/assets/omnizip-logo.pdf +1540 -11
- data/docs/comparison/feature-matrix.adoc +694 -0
- data/docs/comparison/index.adoc +113 -0
- data/docs/comparison/vs-7zip.adoc +309 -0
- data/docs/comparison/vs-peazip.adoc +77 -0
- data/docs/comparison/vs-rubyzip.adoc +342 -0
- data/docs/comparison/vs-winrar.adoc +100 -0
- data/docs/compatibility.adoc +579 -0
- data/docs/concepts/index.adoc +129 -0
- data/docs/developer/architecture.adoc +256 -0
- data/docs/developer/contributing.adoc +158 -0
- data/docs/developer/index.adoc +25 -0
- data/docs/developer/testing.adoc +212 -0
- data/docs/getting-started/basic-usage.adoc +271 -0
- data/docs/getting-started/index.adoc +42 -0
- data/docs/getting-started/installation.adoc +138 -0
- data/docs/getting-started/quick-start.adoc +185 -0
- data/docs/getting-started/your-first-archive.adoc +218 -0
- data/docs/guides/advanced-features/encryption.adoc +300 -0
- data/docs/guides/advanced-features/index.adoc +49 -0
- data/docs/guides/advanced-features/parallel-processing.adoc +246 -0
- data/docs/guides/advanced-features/progress-tracking.adoc +320 -0
- data/docs/guides/advanced-features/streaming.adoc +212 -0
- data/docs/guides/archive-formats/gzip-format.adoc +107 -0
- data/docs/guides/archive-formats/index.adoc +130 -0
- data/docs/guides/archive-formats/rar-format.adoc +104 -0
- data/docs/guides/archive-formats/rar5.adoc +521 -0
- data/docs/guides/archive-formats/seven-zip-format.adoc +35 -0
- data/docs/guides/archive-formats/tar-format.adoc +106 -0
- data/docs/guides/archive-formats/xz-format.adoc +118 -0
- data/docs/guides/archive-formats/zip-format.adoc +35 -0
- data/docs/guides/compression-algorithms/bzip2.adoc +113 -0
- data/docs/guides/compression-algorithms/deflate.adoc +319 -0
- data/docs/guides/compression-algorithms/index.adoc +190 -0
- data/docs/guides/compression-algorithms/lzma.adoc +398 -0
- data/docs/guides/compression-algorithms/lzma2.adoc +327 -0
- data/docs/guides/compression-algorithms/ppmd.adoc +316 -0
- data/docs/guides/compression-algorithms/zstandard.adoc +361 -0
- data/docs/guides/creating-archives.adoc +354 -0
- data/docs/guides/extracting-archives.adoc +53 -0
- data/docs/guides/format-conversion.adoc +64 -0
- data/docs/guides/index.adoc +49 -0
- data/docs/guides/migration-rubyzip.adoc +217 -0
- data/docs/guides/parity-archives.adoc +605 -0
- data/docs/guides/performance-tuning.adoc +88 -0
- data/docs/index.adoc +218 -0
- data/docs/lychee.toml +67 -0
- data/docs/reference/api/overview.adoc +188 -0
- data/docs/reference/cli/compress-command.adoc +114 -0
- data/docs/reference/cli/overview.adoc +140 -0
- data/docs/reference/index.adoc +26 -0
- data/docs/resources/faq.adoc +185 -0
- data/docs/resources/quick-reference.adoc +222 -0
- data/docs/troubleshooting/index.adoc +208 -0
- data/examples/api_comparison.rb +205 -0
- data/examples/deflate64_example.rb +96 -0
- data/examples/par2_demo.rb +121 -0
- data/examples/quick_start_native.rb +150 -0
- data/examples/quick_start_rubyzip.rb +115 -0
- data/examples/rubyzip_compatibility_demo.rb +194 -0
- data/exe/omnizip +27 -0
- data/lib/omnizip/algorithm.rb +130 -0
- data/lib/omnizip/algorithm_registry.rb +86 -0
- data/lib/omnizip/algorithms/.keep +0 -0
- data/lib/omnizip/algorithms/bzip2/bwt.rb +225 -0
- data/lib/omnizip/algorithms/bzip2/decoder.rb +193 -0
- data/lib/omnizip/algorithms/bzip2/encoder.rb +237 -0
- data/lib/omnizip/algorithms/bzip2/huffman.rb +206 -0
- data/lib/omnizip/algorithms/bzip2/mtf.rb +101 -0
- data/lib/omnizip/algorithms/bzip2/rle.rb +151 -0
- data/lib/omnizip/algorithms/bzip2.rb +130 -0
- data/lib/omnizip/algorithms/deflate/constants.rb +28 -0
- data/lib/omnizip/algorithms/deflate/decoder.rb +38 -0
- data/lib/omnizip/algorithms/deflate/encoder.rb +46 -0
- data/lib/omnizip/algorithms/deflate.rb +128 -0
- data/lib/omnizip/algorithms/deflate64/constants.rb +45 -0
- data/lib/omnizip/algorithms/deflate64/decoder.rb +153 -0
- data/lib/omnizip/algorithms/deflate64/encoder.rb +98 -0
- data/lib/omnizip/algorithms/deflate64/huffman_coder.rb +354 -0
- data/lib/omnizip/algorithms/deflate64/lz77_encoder.rb +142 -0
- data/lib/omnizip/algorithms/deflate64.rb +109 -0
- data/lib/omnizip/algorithms/lzma/bit_model.rb +120 -0
- data/lib/omnizip/algorithms/lzma/constants.rb +112 -0
- data/lib/omnizip/algorithms/lzma/decoder.rb +148 -0
- data/lib/omnizip/algorithms/lzma/dictionary.rb +69 -0
- data/lib/omnizip/algorithms/lzma/distance_coder.rb +415 -0
- data/lib/omnizip/algorithms/lzma/encoder.rb +142 -0
- data/lib/omnizip/algorithms/lzma/length_coder.rb +260 -0
- data/lib/omnizip/algorithms/lzma/literal_decoder.rb +320 -0
- data/lib/omnizip/algorithms/lzma/literal_encoder.rb +210 -0
- data/lib/omnizip/algorithms/lzma/lzip_decoder.rb +341 -0
- data/lib/omnizip/algorithms/lzma/lzma_alone_decoder.rb +192 -0
- data/lib/omnizip/algorithms/lzma/lzma_state.rb +128 -0
- data/lib/omnizip/algorithms/lzma/match.rb +32 -0
- data/lib/omnizip/algorithms/lzma/match_finder.rb +205 -0
- data/lib/omnizip/algorithms/lzma/match_finder_config.rb +142 -0
- data/lib/omnizip/algorithms/lzma/match_finder_factory.rb +88 -0
- data/lib/omnizip/algorithms/lzma/optimal_encoder.rb +130 -0
- data/lib/omnizip/algorithms/lzma/probability_models.rb +72 -0
- data/lib/omnizip/algorithms/lzma/range_coder.rb +85 -0
- data/lib/omnizip/algorithms/lzma/range_decoder.rb +434 -0
- data/lib/omnizip/algorithms/lzma/range_encoder.rb +194 -0
- data/lib/omnizip/algorithms/lzma/state.rb +127 -0
- data/lib/omnizip/algorithms/lzma/xz_buffered_range_encoder.rb +325 -0
- data/lib/omnizip/algorithms/lzma/xz_encoder.rb +426 -0
- data/lib/omnizip/algorithms/lzma/xz_encoder_fast.rb +645 -0
- data/lib/omnizip/algorithms/lzma/xz_match_finder_adapter.rb +227 -0
- data/lib/omnizip/algorithms/lzma/xz_price_calculator.rb +169 -0
- data/lib/omnizip/algorithms/lzma/xz_probability_models.rb +261 -0
- data/lib/omnizip/algorithms/lzma/xz_range_encoder.rb +223 -0
- data/lib/omnizip/algorithms/lzma/xz_range_encoder_exact.rb +331 -0
- data/lib/omnizip/algorithms/lzma/xz_state.rb +116 -0
- data/lib/omnizip/algorithms/lzma/xz_utils_decoder.rb +2055 -0
- data/lib/omnizip/algorithms/lzma.rb +238 -0
- data/lib/omnizip/algorithms/lzma2/chunk_manager.rb +182 -0
- data/lib/omnizip/algorithms/lzma2/constants.rb +41 -0
- data/lib/omnizip/algorithms/lzma2/encoder.rb +147 -0
- data/lib/omnizip/algorithms/lzma2/lzma2_chunk.rb +161 -0
- data/lib/omnizip/algorithms/lzma2/properties.rb +179 -0
- data/lib/omnizip/algorithms/lzma2/simple_lzma2_encoder.rb +127 -0
- data/lib/omnizip/algorithms/lzma2/xz_encoder_adapter.rb +85 -0
- data/lib/omnizip/algorithms/lzma2.rb +141 -0
- data/lib/omnizip/algorithms/ppmd7/constants.rb +74 -0
- data/lib/omnizip/algorithms/ppmd7/context.rb +154 -0
- data/lib/omnizip/algorithms/ppmd7/decoder.rb +126 -0
- data/lib/omnizip/algorithms/ppmd7/encoder.rb +163 -0
- data/lib/omnizip/algorithms/ppmd7/model.rb +248 -0
- data/lib/omnizip/algorithms/ppmd7/symbol_state.rb +57 -0
- data/lib/omnizip/algorithms/ppmd7.rb +116 -0
- data/lib/omnizip/algorithms/ppmd8/constants.rb +61 -0
- data/lib/omnizip/algorithms/ppmd8/context.rb +34 -0
- data/lib/omnizip/algorithms/ppmd8/decoder.rb +107 -0
- data/lib/omnizip/algorithms/ppmd8/encoder.rb +138 -0
- data/lib/omnizip/algorithms/ppmd8/model.rb +250 -0
- data/lib/omnizip/algorithms/ppmd8/restoration_method.rb +78 -0
- data/lib/omnizip/algorithms/ppmd8.rb +82 -0
- data/lib/omnizip/algorithms/ppmd_base.rb +138 -0
- data/lib/omnizip/algorithms/sevenzip_lzma2.rb +123 -0
- data/lib/omnizip/algorithms/xz_lzma2.rb +118 -0
- data/lib/omnizip/algorithms/zstandard/constants.rb +25 -0
- data/lib/omnizip/algorithms/zstandard/decoder.rb +46 -0
- data/lib/omnizip/algorithms/zstandard/encoder.rb +51 -0
- data/lib/omnizip/algorithms/zstandard.rb +138 -0
- data/lib/omnizip/buffer/memory_archive.rb +251 -0
- data/lib/omnizip/buffer/memory_extractor.rb +224 -0
- data/lib/omnizip/buffer.rb +176 -0
- data/lib/omnizip/checksum_registry.rb +114 -0
- data/lib/omnizip/checksums/crc32.rb +100 -0
- data/lib/omnizip/checksums/crc64.rb +101 -0
- data/lib/omnizip/checksums/crc_base.rb +158 -0
- data/lib/omnizip/checksums/verifier.rb +131 -0
- data/lib/omnizip/chunked/memory_manager.rb +194 -0
- data/lib/omnizip/chunked/reader.rb +78 -0
- data/lib/omnizip/chunked/writer.rb +120 -0
- data/lib/omnizip/chunked.rb +129 -0
- data/lib/omnizip/cli/output_formatter.rb +104 -0
- data/lib/omnizip/cli.rb +572 -0
- data/lib/omnizip/commands/.keep +0 -0
- data/lib/omnizip/commands/archive_create_command.rb +427 -0
- data/lib/omnizip/commands/archive_extract_command.rb +272 -0
- data/lib/omnizip/commands/archive_list_command.rb +218 -0
- data/lib/omnizip/commands/archive_repair_command.rb +131 -0
- data/lib/omnizip/commands/archive_verify_command.rb +117 -0
- data/lib/omnizip/commands/compress_command.rb +117 -0
- data/lib/omnizip/commands/decompress_command.rb +120 -0
- data/lib/omnizip/commands/list_command.rb +53 -0
- data/lib/omnizip/commands/metadata_command.rb +153 -0
- data/lib/omnizip/commands/parity_create_command.rb +122 -0
- data/lib/omnizip/commands/parity_repair_command.rb +122 -0
- data/lib/omnizip/commands/parity_verify_command.rb +124 -0
- data/lib/omnizip/commands/profile_list_command.rb +56 -0
- data/lib/omnizip/commands/profile_show_command.rb +44 -0
- data/lib/omnizip/convenience.rb +359 -0
- data/lib/omnizip/converter/conversion_registry.rb +49 -0
- data/lib/omnizip/converter/conversion_strategy.rb +121 -0
- data/lib/omnizip/converter/seven_zip_to_zip_strategy.rb +97 -0
- data/lib/omnizip/converter/zip_to_seven_zip_strategy.rb +112 -0
- data/lib/omnizip/converter.rb +105 -0
- data/lib/omnizip/crypto/aes256/cipher.rb +100 -0
- data/lib/omnizip/crypto/aes256/constants.rb +28 -0
- data/lib/omnizip/crypto/aes256/key_derivation.rb +101 -0
- data/lib/omnizip/crypto/aes256.rb +102 -0
- data/lib/omnizip/error.rb +106 -0
- data/lib/omnizip/eta/exponential_smoothing_estimator.rb +98 -0
- data/lib/omnizip/eta/moving_average_estimator.rb +99 -0
- data/lib/omnizip/eta/rate_calculator.rb +104 -0
- data/lib/omnizip/eta/sample_history.rb +143 -0
- data/lib/omnizip/eta/time_estimator.rb +106 -0
- data/lib/omnizip/eta.rb +63 -0
- data/lib/omnizip/extraction/filter_chain.rb +177 -0
- data/lib/omnizip/extraction/glob_pattern.rb +140 -0
- data/lib/omnizip/extraction/pattern_matcher.rb +70 -0
- data/lib/omnizip/extraction/predicate_pattern.rb +52 -0
- data/lib/omnizip/extraction/regex_pattern.rb +50 -0
- data/lib/omnizip/extraction/selective_extractor.rb +240 -0
- data/lib/omnizip/extraction.rb +111 -0
- data/lib/omnizip/file_type/mime_classifier.rb +144 -0
- data/lib/omnizip/file_type.rb +113 -0
- data/lib/omnizip/filter.rb +139 -0
- data/lib/omnizip/filter_pipeline.rb +108 -0
- data/lib/omnizip/filter_registry.rb +166 -0
- data/lib/omnizip/filters/bcj.rb +279 -0
- data/lib/omnizip/filters/bcj2/constants.rb +53 -0
- data/lib/omnizip/filters/bcj2/decoder.rb +200 -0
- data/lib/omnizip/filters/bcj2/encoder.rb +61 -0
- data/lib/omnizip/filters/bcj2/stream_data.rb +93 -0
- data/lib/omnizip/filters/bcj2.rb +99 -0
- data/lib/omnizip/filters/bcj_arm.rb +176 -0
- data/lib/omnizip/filters/bcj_arm64.rb +244 -0
- data/lib/omnizip/filters/bcj_ia64.rb +196 -0
- data/lib/omnizip/filters/bcj_ppc.rb +190 -0
- data/lib/omnizip/filters/bcj_sparc.rb +176 -0
- data/lib/omnizip/filters/bcj_x86.rb +193 -0
- data/lib/omnizip/filters/delta.rb +196 -0
- data/lib/omnizip/filters/filter_base.rb +72 -0
- data/lib/omnizip/filters/registry.rb +123 -0
- data/lib/omnizip/filters/xz_delta.rb +258 -0
- data/lib/omnizip/format_detector.rb +162 -0
- data/lib/omnizip/format_registry.rb +59 -0
- data/lib/omnizip/formats/.keep +0 -0
- data/lib/omnizip/formats/bzip2_file.rb +172 -0
- data/lib/omnizip/formats/cpio/constants.rb +55 -0
- data/lib/omnizip/formats/cpio/entry.rb +385 -0
- data/lib/omnizip/formats/cpio/reader.rb +196 -0
- data/lib/omnizip/formats/cpio/writer.rb +234 -0
- data/lib/omnizip/formats/cpio.rb +140 -0
- data/lib/omnizip/formats/format_spec_loader.rb +230 -0
- data/lib/omnizip/formats/gzip.rb +238 -0
- data/lib/omnizip/formats/iso/directory_builder.rb +297 -0
- data/lib/omnizip/formats/iso/directory_record.rb +152 -0
- data/lib/omnizip/formats/iso/joliet.rb +204 -0
- data/lib/omnizip/formats/iso/path_table.rb +125 -0
- data/lib/omnizip/formats/iso/reader.rb +197 -0
- data/lib/omnizip/formats/iso/rock_ridge.rb +349 -0
- data/lib/omnizip/formats/iso/volume_builder.rb +320 -0
- data/lib/omnizip/formats/iso/volume_descriptor.rb +168 -0
- data/lib/omnizip/formats/iso/writer.rb +530 -0
- data/lib/omnizip/formats/iso.rb +140 -0
- data/lib/omnizip/formats/lzip.rb +175 -0
- data/lib/omnizip/formats/lzma_alone.rb +171 -0
- data/lib/omnizip/formats/rar/archive_repairer.rb +243 -0
- data/lib/omnizip/formats/rar/archive_verifier.rb +195 -0
- data/lib/omnizip/formats/rar/block_parser.rb +243 -0
- data/lib/omnizip/formats/rar/compression/bit_stream.rb +180 -0
- data/lib/omnizip/formats/rar/compression/dispatcher.rb +217 -0
- data/lib/omnizip/formats/rar/compression/lz77_huffman/decoder.rb +216 -0
- data/lib/omnizip/formats/rar/compression/lz77_huffman/encoder.rb +158 -0
- data/lib/omnizip/formats/rar/compression/lz77_huffman/huffman_builder.rb +217 -0
- data/lib/omnizip/formats/rar/compression/lz77_huffman/huffman_coder.rb +189 -0
- data/lib/omnizip/formats/rar/compression/lz77_huffman/match_finder.rb +135 -0
- data/lib/omnizip/formats/rar/compression/lz77_huffman/sliding_window.rb +165 -0
- data/lib/omnizip/formats/rar/compression/ppmd/context.rb +105 -0
- data/lib/omnizip/formats/rar/compression/ppmd/decoder.rb +219 -0
- data/lib/omnizip/formats/rar/compression/ppmd/encoder.rb +262 -0
- data/lib/omnizip/formats/rar/compression_method_registry.rb +106 -0
- data/lib/omnizip/formats/rar/constants.rb +82 -0
- data/lib/omnizip/formats/rar/decompressor.rb +238 -0
- data/lib/omnizip/formats/rar/external_writer.rb +312 -0
- data/lib/omnizip/formats/rar/header.rb +192 -0
- data/lib/omnizip/formats/rar/license_validator.rb +109 -0
- data/lib/omnizip/formats/rar/models/rar_archive.rb +77 -0
- data/lib/omnizip/formats/rar/models/rar_entry.rb +65 -0
- data/lib/omnizip/formats/rar/models/rar_volume.rb +56 -0
- data/lib/omnizip/formats/rar/parity_handler.rb +292 -0
- data/lib/omnizip/formats/rar/rar5/compression/lzma.rb +202 -0
- data/lib/omnizip/formats/rar/rar5/compression/lzss.rb +578 -0
- data/lib/omnizip/formats/rar/rar5/compression/store.rb +60 -0
- data/lib/omnizip/formats/rar/rar5/crc32.rb +39 -0
- data/lib/omnizip/formats/rar/rar5/encryption/aes256_cbc.rb +97 -0
- data/lib/omnizip/formats/rar/rar5/encryption/encryption_header.rb +114 -0
- data/lib/omnizip/formats/rar/rar5/encryption/encryption_manager.rb +166 -0
- data/lib/omnizip/formats/rar/rar5/encryption/key_derivation.rb +97 -0
- data/lib/omnizip/formats/rar/rar5/header.rb +187 -0
- data/lib/omnizip/formats/rar/rar5/models/encryption_options.rb +74 -0
- data/lib/omnizip/formats/rar/rar5/models/recovery_options.rb +63 -0
- data/lib/omnizip/formats/rar/rar5/models/solid_options.rb +63 -0
- data/lib/omnizip/formats/rar/rar5/models/volume_options.rb +74 -0
- data/lib/omnizip/formats/rar/rar5/multi_volume/ARCHITECTURE.md +290 -0
- data/lib/omnizip/formats/rar/rar5/multi_volume/volume_manager.rb +264 -0
- data/lib/omnizip/formats/rar/rar5/multi_volume/volume_splitter.rb +155 -0
- data/lib/omnizip/formats/rar/rar5/multi_volume/volume_writer.rb +194 -0
- data/lib/omnizip/formats/rar/rar5/solid/solid_encoder.rb +109 -0
- data/lib/omnizip/formats/rar/rar5/solid/solid_manager.rb +142 -0
- data/lib/omnizip/formats/rar/rar5/solid/solid_stream.rb +121 -0
- data/lib/omnizip/formats/rar/rar5/vint.rb +65 -0
- data/lib/omnizip/formats/rar/rar5/writer.rb +466 -0
- data/lib/omnizip/formats/rar/rar_format_base.rb +241 -0
- data/lib/omnizip/formats/rar/reader.rb +366 -0
- data/lib/omnizip/formats/rar/recovery_record.rb +245 -0
- data/lib/omnizip/formats/rar/volume_manager.rb +168 -0
- data/lib/omnizip/formats/rar/writer.rb +431 -0
- data/lib/omnizip/formats/rar.rb +205 -0
- data/lib/omnizip/formats/rar3/compressor.rb +73 -0
- data/lib/omnizip/formats/rar3/decompressor.rb +66 -0
- data/lib/omnizip/formats/rar3/reader.rb +386 -0
- data/lib/omnizip/formats/rar3/writer.rb +219 -0
- data/lib/omnizip/formats/rar5/compressor.rb +73 -0
- data/lib/omnizip/formats/rar5/decompressor.rb +66 -0
- data/lib/omnizip/formats/rar5/reader.rb +342 -0
- data/lib/omnizip/formats/rar5/writer.rb +214 -0
- data/lib/omnizip/formats/seven_zip/coder_chain.rb +150 -0
- data/lib/omnizip/formats/seven_zip/constants.rb +126 -0
- data/lib/omnizip/formats/seven_zip/encoded_header.rb +114 -0
- data/lib/omnizip/formats/seven_zip/encrypted_header.rb +142 -0
- data/lib/omnizip/formats/seven_zip/file_collector.rb +144 -0
- data/lib/omnizip/formats/seven_zip/header.rb +106 -0
- data/lib/omnizip/formats/seven_zip/header_encryptor.rb +134 -0
- data/lib/omnizip/formats/seven_zip/header_writer.rb +466 -0
- data/lib/omnizip/formats/seven_zip/models/coder_info.rb +30 -0
- data/lib/omnizip/formats/seven_zip/models/file_entry.rb +58 -0
- data/lib/omnizip/formats/seven_zip/models/folder.rb +69 -0
- data/lib/omnizip/formats/seven_zip/models/stream_info.rb +42 -0
- data/lib/omnizip/formats/seven_zip/parser.rb +660 -0
- data/lib/omnizip/formats/seven_zip/reader.rb +458 -0
- data/lib/omnizip/formats/seven_zip/split_archive_reader.rb +632 -0
- data/lib/omnizip/formats/seven_zip/split_archive_writer.rb +315 -0
- data/lib/omnizip/formats/seven_zip/stream_compressor.rb +151 -0
- data/lib/omnizip/formats/seven_zip/stream_decompressor.rb +162 -0
- data/lib/omnizip/formats/seven_zip/writer.rb +740 -0
- data/lib/omnizip/formats/seven_zip.rb +93 -0
- data/lib/omnizip/formats/tar/constants.rb +73 -0
- data/lib/omnizip/formats/tar/entry.rb +94 -0
- data/lib/omnizip/formats/tar/header.rb +168 -0
- data/lib/omnizip/formats/tar/reader.rb +121 -0
- data/lib/omnizip/formats/tar/writer.rb +216 -0
- data/lib/omnizip/formats/tar.rb +84 -0
- data/lib/omnizip/formats/xz/reader.rb +116 -0
- data/lib/omnizip/formats/xz.rb +237 -0
- data/lib/omnizip/formats/xz_impl/block_decoder.rb +754 -0
- data/lib/omnizip/formats/xz_impl/block_encoder.rb +306 -0
- data/lib/omnizip/formats/xz_impl/block_header.rb +210 -0
- data/lib/omnizip/formats/xz_impl/block_header_parser.rb +186 -0
- data/lib/omnizip/formats/xz_impl/constants.rb +49 -0
- data/lib/omnizip/formats/xz_impl/index_decoder.rb +174 -0
- data/lib/omnizip/formats/xz_impl/index_encoder.rb +122 -0
- data/lib/omnizip/formats/xz_impl/stream_decoder.rb +468 -0
- data/lib/omnizip/formats/xz_impl/stream_encoder.rb +99 -0
- data/lib/omnizip/formats/xz_impl/stream_footer.rb +81 -0
- data/lib/omnizip/formats/xz_impl/stream_footer_parser.rb +117 -0
- data/lib/omnizip/formats/xz_impl/stream_header.rb +55 -0
- data/lib/omnizip/formats/xz_impl/stream_header_parser.rb +108 -0
- data/lib/omnizip/formats/xz_impl/vli.rb +128 -0
- data/lib/omnizip/formats/xz_impl/writer.rb +421 -0
- data/lib/omnizip/formats/zip/central_directory_header.rb +195 -0
- data/lib/omnizip/formats/zip/constants.rb +69 -0
- data/lib/omnizip/formats/zip/end_of_central_directory.rb +133 -0
- data/lib/omnizip/formats/zip/local_file_header.rb +138 -0
- data/lib/omnizip/formats/zip/reader.rb +250 -0
- data/lib/omnizip/formats/zip/unix_extra_field.rb +153 -0
- data/lib/omnizip/formats/zip/writer.rb +375 -0
- data/lib/omnizip/formats/zip/zip64_end_of_central_directory.rb +104 -0
- data/lib/omnizip/formats/zip/zip64_end_of_central_directory_locator.rb +66 -0
- data/lib/omnizip/formats/zip/zip64_extra_field.rb +114 -0
- data/lib/omnizip/formats/zip.rb +50 -0
- data/lib/omnizip/implementations/base/lzma2_decoder_base.rb +75 -0
- data/lib/omnizip/implementations/base/lzma2_encoder_base.rb +128 -0
- data/lib/omnizip/implementations/base/lzma_decoder_base.rb +83 -0
- data/lib/omnizip/implementations/base/lzma_encoder_base.rb +108 -0
- data/lib/omnizip/implementations/base/state_machine_base.rb +182 -0
- data/lib/omnizip/implementations/seven_zip/lzma/decoder.rb +421 -0
- data/lib/omnizip/implementations/seven_zip/lzma/encoder.rb +465 -0
- data/lib/omnizip/implementations/seven_zip/lzma/match_finder.rb +288 -0
- data/lib/omnizip/implementations/seven_zip/lzma/range_decoder.rb +200 -0
- data/lib/omnizip/implementations/seven_zip/lzma/range_encoder.rb +197 -0
- data/lib/omnizip/implementations/seven_zip/lzma/state_machine.rb +141 -0
- data/lib/omnizip/implementations/seven_zip/lzma2/encoder.rb +519 -0
- data/lib/omnizip/implementations/xz_utils/lzma2/decoder.rb +723 -0
- data/lib/omnizip/implementations/xz_utils/lzma2/encoder.rb +750 -0
- data/lib/omnizip/io/buffered_input.rb +146 -0
- data/lib/omnizip/io/buffered_output.rb +105 -0
- data/lib/omnizip/io/stream_manager.rb +115 -0
- data/lib/omnizip/link_handler/hard_link.rb +79 -0
- data/lib/omnizip/link_handler/symbolic_link.rb +74 -0
- data/lib/omnizip/link_handler.rb +124 -0
- data/lib/omnizip/metadata/archive_metadata.rb +114 -0
- data/lib/omnizip/metadata/entry_metadata.rb +146 -0
- data/lib/omnizip/metadata/metadata_editor.rb +171 -0
- data/lib/omnizip/metadata/metadata_registry.rb +64 -0
- data/lib/omnizip/metadata/metadata_validator.rb +99 -0
- data/lib/omnizip/metadata.rb +57 -0
- data/lib/omnizip/models/.keep +0 -0
- data/lib/omnizip/models/algorithm_metadata.rb +73 -0
- data/lib/omnizip/models/compression_options.rb +71 -0
- data/lib/omnizip/models/conversion_options.rb +87 -0
- data/lib/omnizip/models/conversion_result.rb +135 -0
- data/lib/omnizip/models/eta_result.rb +46 -0
- data/lib/omnizip/models/extraction_rule.rb +115 -0
- data/lib/omnizip/models/filter_chain.rb +144 -0
- data/lib/omnizip/models/filter_config.rb +183 -0
- data/lib/omnizip/models/match_result.rb +124 -0
- data/lib/omnizip/models/optimization_suggestion.rb +91 -0
- data/lib/omnizip/models/parallel_options.rb +104 -0
- data/lib/omnizip/models/performance_result.rb +79 -0
- data/lib/omnizip/models/profile_report.rb +82 -0
- data/lib/omnizip/models/progress_options.rb +38 -0
- data/lib/omnizip/models/split_options.rb +116 -0
- data/lib/omnizip/optimization_registry.rb +81 -0
- data/lib/omnizip/parallel/job_queue.rb +209 -0
- data/lib/omnizip/parallel/job_scheduler.rb +203 -0
- data/lib/omnizip/parallel/parallel_compressor.rb +347 -0
- data/lib/omnizip/parallel/parallel_extractor.rb +329 -0
- data/lib/omnizip/parallel/worker_pool.rb +223 -0
- data/lib/omnizip/parallel.rb +149 -0
- data/lib/omnizip/parity/chunked_block_processor.rb +196 -0
- data/lib/omnizip/parity/galois16.rb +145 -0
- data/lib/omnizip/parity/models/creator_packet.rb +73 -0
- data/lib/omnizip/parity/models/file_description_packet.rb +133 -0
- data/lib/omnizip/parity/models/ifsc_packet.rb +123 -0
- data/lib/omnizip/parity/models/main_packet.rb +128 -0
- data/lib/omnizip/parity/models/packet.rb +156 -0
- data/lib/omnizip/parity/models/packet_registry.rb +109 -0
- data/lib/omnizip/parity/models/recovery_slice_packet.rb +78 -0
- data/lib/omnizip/parity/par2_creator.rb +531 -0
- data/lib/omnizip/parity/par2_repairer.rb +407 -0
- data/lib/omnizip/parity/par2_verifier.rb +364 -0
- data/lib/omnizip/parity/par2cmdline_algorithm.rb +110 -0
- data/lib/omnizip/parity/par2cmdline_coefficients.rb +78 -0
- data/lib/omnizip/parity/reed_solomon_decoder.rb +266 -0
- data/lib/omnizip/parity/reed_solomon_encoder.rb +111 -0
- data/lib/omnizip/parity/reed_solomon_matrix.rb +342 -0
- data/lib/omnizip/parity.rb +186 -0
- data/lib/omnizip/password/encryption_registry.rb +65 -0
- data/lib/omnizip/password/encryption_strategy.rb +96 -0
- data/lib/omnizip/password/password_validator.rb +129 -0
- data/lib/omnizip/password/winzip_aes_strategy.rb +192 -0
- data/lib/omnizip/password/zip_crypto_strategy.rb +141 -0
- data/lib/omnizip/password.rb +87 -0
- data/lib/omnizip/pipe/stream_compressor.rb +124 -0
- data/lib/omnizip/pipe/stream_decompressor.rb +174 -0
- data/lib/omnizip/pipe.rb +121 -0
- data/lib/omnizip/platform/ntfs_streams.rb +201 -0
- data/lib/omnizip/platform.rb +189 -0
- data/lib/omnizip/profile/archive_profile.rb +39 -0
- data/lib/omnizip/profile/balanced_profile.rb +33 -0
- data/lib/omnizip/profile/binary_profile.rb +36 -0
- data/lib/omnizip/profile/compression_profile.rb +158 -0
- data/lib/omnizip/profile/custom_profile.rb +157 -0
- data/lib/omnizip/profile/fast_profile.rb +33 -0
- data/lib/omnizip/profile/maximum_profile.rb +33 -0
- data/lib/omnizip/profile/profile_detector.rb +110 -0
- data/lib/omnizip/profile/profile_registry.rb +161 -0
- data/lib/omnizip/profile/text_profile.rb +36 -0
- data/lib/omnizip/profile.rb +190 -0
- data/lib/omnizip/profiler/memory_profiler.rb +66 -0
- data/lib/omnizip/profiler/method_profiler.rb +49 -0
- data/lib/omnizip/profiler/report_generator.rb +169 -0
- data/lib/omnizip/profiler.rb +204 -0
- data/lib/omnizip/progress/callback_reporter.rb +36 -0
- data/lib/omnizip/progress/console_reporter.rb +62 -0
- data/lib/omnizip/progress/log_reporter.rb +91 -0
- data/lib/omnizip/progress/operation_progress.rb +118 -0
- data/lib/omnizip/progress/progress_bar.rb +156 -0
- data/lib/omnizip/progress/progress_reporter.rb +40 -0
- data/lib/omnizip/progress/progress_tracker.rb +190 -0
- data/lib/omnizip/progress/silent_reporter.rb +24 -0
- data/lib/omnizip/progress.rb +127 -0
- data/lib/omnizip/rubyzip_compat.rb +63 -0
- data/lib/omnizip/temp/safe_extract.rb +168 -0
- data/lib/omnizip/temp/temp_file.rb +124 -0
- data/lib/omnizip/temp/temp_file_pool.rb +109 -0
- data/lib/omnizip/temp.rb +181 -0
- data/lib/omnizip/version.rb +5 -0
- data/lib/omnizip/zip/entry.rb +156 -0
- data/lib/omnizip/zip/file.rb +485 -0
- data/lib/omnizip/zip/input_stream.rb +273 -0
- data/lib/omnizip/zip/output_stream.rb +324 -0
- data/lib/omnizip.rb +156 -0
- data/readme-docs/advanced-features.adoc +515 -0
- data/readme-docs/api-usage.adoc +444 -0
- data/readme-docs/architecture.adoc +449 -0
- data/readme-docs/archive-formats.adoc +479 -0
- data/readme-docs/cli-usage.adoc +222 -0
- data/readme-docs/compression-algorithms.adoc +442 -0
- data/readme-docs/compression-profiles.adoc +247 -0
- data/readme-docs/encryption-checksums.adoc +328 -0
- data/readme-docs/format-converter.adoc +325 -0
- data/readme-docs/installation.adoc +228 -0
- data/readme-docs/par2-archives.adoc +608 -0
- data/readme-docs/performance-profiler.adoc +389 -0
- data/readme-docs/preprocessing-filters.adoc +280 -0
- data/xz-file-format-1.2.1.txt +1174 -0
- metadata +617 -0
data/docs/index.adoc
ADDED
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Home
|
|
3
|
+
nav_order: 0
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
== Omnizip: Pure Ruby compression library
|
|
7
|
+
|
|
8
|
+
=== Purpose
|
|
9
|
+
|
|
10
|
+
Omnizip is a comprehensive pure Ruby implementation of compression algorithms and archive formats. Built on an extensible, registry-based architecture with clean object-oriented design, Omnizip provides full-featured compression capabilities without external dependencies.
|
|
11
|
+
|
|
12
|
+
This implementation supports multiple compression algorithms (LZMA, LZMA2, BZip2, PPMd7/8, Deflate, Deflate64, Zstandard), preprocessing filters (BCJ variants, Delta), encryption (AES-256), and complete support for multiple archive formats (.7z, ZIP, RAR, TAR, ISO, CPIO, GZIP, XZ, BZIP2).
|
|
13
|
+
|
|
14
|
+
It provides both a command-line interface and a programmatic Ruby API, making it ideal for applications requiring portable, dependency-free compression without relying on system-level libraries or external binaries.
|
|
15
|
+
|
|
16
|
+
**Pure Ruby Implementation:** Works on all Ruby platforms (MRI, JRuby, TruffleRuby) with zero external dependencies. Performance is 10-60x slower than native implementations, which is an acceptable trade-off for maximum portability.
|
|
17
|
+
|
|
18
|
+
=== Quick Start
|
|
19
|
+
|
|
20
|
+
Get started with Omnizip in minutes:
|
|
21
|
+
|
|
22
|
+
* link:getting-started/installation.html[Install the gem and dependencies]
|
|
23
|
+
* link:getting-started/quick-start.html[Compress your first file in 5 minutes]
|
|
24
|
+
* link:getting-started/your-first-archive.html[Create your first archive]
|
|
25
|
+
|
|
26
|
+
=== Documentation Map
|
|
27
|
+
|
|
28
|
+
==== New to Omnizip?
|
|
29
|
+
|
|
30
|
+
Follow this learning path:
|
|
31
|
+
|
|
32
|
+
. Install Omnizip
|
|
33
|
+
** link:getting-started/installation.html[Installation Guide]
|
|
34
|
+
|
|
35
|
+
. Quick Start (5 minutes)
|
|
36
|
+
** link:getting-started/quick-start.html[Quick Start Guide]
|
|
37
|
+
|
|
38
|
+
. Create Your First Archive
|
|
39
|
+
** link:getting-started/your-first-archive.html[Create Your First Archive]
|
|
40
|
+
|
|
41
|
+
. Learn Basic Operations
|
|
42
|
+
** link:guides/creating-archives.html[Create archives]
|
|
43
|
+
** link:guides/extracting-archives.html[Extract from archives]
|
|
44
|
+
|
|
45
|
+
==== Looking for Something Specific?
|
|
46
|
+
|
|
47
|
+
**Working with Files**
|
|
48
|
+
|
|
49
|
+
* link:guides/creating-archives.html[Create new archives]
|
|
50
|
+
* link:guides/extracting-archives.html[Extract from archives]
|
|
51
|
+
* link:guides/format-conversion.html[Convert between formats]
|
|
52
|
+
|
|
53
|
+
**Compression Algorithms**
|
|
54
|
+
|
|
55
|
+
* link:guides/compression-algorithms/lzma.html[LZMA/LZMA2 compression]
|
|
56
|
+
* link:guides/compression-algorithms/bzip2.html[BZip2 compression]
|
|
57
|
+
* link:guides/compression-algorithms/ppmd.html[PPMd7/PPMd8 compression]
|
|
58
|
+
* link:guides/compression-algorithms/deflate.html[Deflate/Deflate64 compression]
|
|
59
|
+
* link:guides/compression-algorithms/zstandard.html[Zstandard compression]
|
|
60
|
+
|
|
61
|
+
**Archive Formats**
|
|
62
|
+
|
|
63
|
+
* link:guides/archive-formats/seven-zip-format.html[7z archives]
|
|
64
|
+
* link:guides/archive-formats/zip-format.html[ZIP archives]
|
|
65
|
+
* link:guides/archive-formats/rar-format.html[RAR4/RAR5 archives]
|
|
66
|
+
* link:guides/archive-formats/tar-format.html[TAR archives]
|
|
67
|
+
* link:guides/archive-formats/gzip-format.html[GZIP files]
|
|
68
|
+
* link:guides/archive-formats/xz-format.html[XZ files]
|
|
69
|
+
|
|
70
|
+
**Advanced Features**
|
|
71
|
+
|
|
72
|
+
* link:guides/advanced-features/streaming.html[Streaming operations]
|
|
73
|
+
* link:guides/advanced-features/parallel-processing.html[Parallel processing]
|
|
74
|
+
* link:guides/advanced-features/encryption.html[Encryption]
|
|
75
|
+
* link:guides/parity-archives.html[PAR2 error correction]
|
|
76
|
+
|
|
77
|
+
**Reference Materials**
|
|
78
|
+
|
|
79
|
+
* link:resources/quick-reference.html[Cheat sheet for common operations]
|
|
80
|
+
* link:reference/cli/overview.html[Command-line interface documentation]
|
|
81
|
+
* link:reference/api/overview.html[Ruby API documentation]
|
|
82
|
+
* link:concepts/index.html[Core concepts explained]
|
|
83
|
+
* link:developer/architecture.html[Design and implementation details]
|
|
84
|
+
|
|
85
|
+
=== Supported Compression Algorithms
|
|
86
|
+
|
|
87
|
+
Omnizip supports 6 major compression algorithms:
|
|
88
|
+
|
|
89
|
+
[cols="1,3,2"]
|
|
90
|
+
|===
|
|
91
|
+
|Algorithm |Description |Best For
|
|
92
|
+
|
|
93
|
+
|LZMA/LZMA2
|
|
94
|
+
|Dictionary-based compression with high ratio
|
|
95
|
+
|Archives, backups, general compression
|
|
96
|
+
|
|
97
|
+
|BZip2
|
|
98
|
+
|Burrows-Wheeler Transform compression
|
|
99
|
+
|Text files, source code
|
|
100
|
+
|
|
101
|
+
|PPMd7/PPMd8
|
|
102
|
+
|Prediction by Partial Matching
|
|
103
|
+
|Text, documents, natural language
|
|
104
|
+
|
|
105
|
+
|Deflate/Deflate64
|
|
106
|
+
|ZIP-compatible compression
|
|
107
|
+
|Cross-platform compatibility
|
|
108
|
+
|
|
109
|
+
|Zstandard
|
|
110
|
+
|Modern fast compression
|
|
111
|
+
|Speed-sensitive applications
|
|
112
|
+
|===
|
|
113
|
+
|
|
114
|
+
=== Supported Archive Formats
|
|
115
|
+
|
|
116
|
+
Omnizip supports 10 archive formats:
|
|
117
|
+
|
|
118
|
+
[cols="1,3,2"]
|
|
119
|
+
|===
|
|
120
|
+
|Format |Description |Common Use
|
|
121
|
+
|
|
122
|
+
|.7z
|
|
123
|
+
|7-Zip archives with solid compression
|
|
124
|
+
|Software distribution, backups
|
|
125
|
+
|
|
126
|
+
|ZIP
|
|
127
|
+
|ZIP archives with ZIP64 support
|
|
128
|
+
|Cross-platform archives
|
|
129
|
+
|
|
130
|
+
|RAR4/RAR5
|
|
131
|
+
|RAR archives with multi-volume support
|
|
132
|
+
|Binary distribution, file sharing
|
|
133
|
+
|
|
134
|
+
|TAR
|
|
135
|
+
|TAR archives with POSIX extensions
|
|
136
|
+
|Unix backups, software packaging
|
|
137
|
+
|
|
138
|
+
|ISO 9660
|
|
139
|
+
|ISO optical disc images
|
|
140
|
+
|CD/DVD images
|
|
141
|
+
|
|
142
|
+
|CPIO
|
|
143
|
+
|CPIO archives
|
|
144
|
+
|Unix system backups
|
|
145
|
+
|
|
146
|
+
|GZIP
|
|
147
|
+
|GZIP compressed files
|
|
148
|
+
|Single file compression
|
|
149
|
+
|
|
150
|
+
|XZ
|
|
151
|
+
|XZ compressed files with LZMA2
|
|
152
|
+
|System package compression
|
|
153
|
+
|
|
154
|
+
|BZIP2
|
|
155
|
+
|BZIP2 compressed files
|
|
156
|
+
|Text file compression
|
|
157
|
+
|===
|
|
158
|
+
|
|
159
|
+
=== Key Features
|
|
160
|
+
|
|
161
|
+
* **Pure Ruby** - No native dependencies, works on any Ruby platform
|
|
162
|
+
* **Registry-Based** - Extensible plugin architecture for algorithms and formats
|
|
163
|
+
* **Multiple Formats** - Support for 10+ archive formats
|
|
164
|
+
* **Compression Profiles** - Smart algorithm selection based on file type
|
|
165
|
+
* **Solid Archives** - Shared dictionary for better compression ratios
|
|
166
|
+
* **Multi-Volume** - Split archives across multiple files
|
|
167
|
+
* **Encryption** - AES-256 password protection
|
|
168
|
+
* **PAR2 Support** - Error correction and recovery records
|
|
169
|
+
* **CLI Tools** - Complete command-line interface
|
|
170
|
+
* **Ruby API** - Full programmatic access
|
|
171
|
+
* **Enumerable** - All collections support Ruby's Enumerable interface
|
|
172
|
+
|
|
173
|
+
=== Example Usage
|
|
174
|
+
|
|
175
|
+
.Compressing a file
|
|
176
|
+
[source,ruby]
|
|
177
|
+
----
|
|
178
|
+
require 'omnizip'
|
|
179
|
+
|
|
180
|
+
# Simple one-liner
|
|
181
|
+
Omnizip.compress_file('input.txt', 'output.zip')
|
|
182
|
+
|
|
183
|
+
# With options
|
|
184
|
+
Omnizip.compress_file('input.txt', 'output.lzma',
|
|
185
|
+
algorithm: :lzma,
|
|
186
|
+
level: 9
|
|
187
|
+
)
|
|
188
|
+
----
|
|
189
|
+
|
|
190
|
+
.Command-line interface
|
|
191
|
+
[source,bash]
|
|
192
|
+
----
|
|
193
|
+
# Compress a file
|
|
194
|
+
omnizip compress input.txt output.lzma --level 9
|
|
195
|
+
|
|
196
|
+
# Create a .7z archive
|
|
197
|
+
omnizip archive create backup.7z documents/ photos/
|
|
198
|
+
|
|
199
|
+
# Extract an archive
|
|
200
|
+
omnizip archive extract backup.7z output/
|
|
201
|
+
|
|
202
|
+
# List archive contents
|
|
203
|
+
omnizip archive list backup.7z
|
|
204
|
+
----
|
|
205
|
+
|
|
206
|
+
=== Getting help
|
|
207
|
+
|
|
208
|
+
* **Documentation**: Browse the guides and reference sections
|
|
209
|
+
* **Issues**: Report bugs at https://github.com/metanorma/omnizip/issues
|
|
210
|
+
* **Source**: View the code at https://github.com/metanorma/omnizip
|
|
211
|
+
|
|
212
|
+
=== Related sections
|
|
213
|
+
|
|
214
|
+
* link:getting-started/index.html[Installation and quick start]
|
|
215
|
+
* link:guides/index.html[Comprehensive usage guides]
|
|
216
|
+
* link:reference/index.html[API and CLI documentation]
|
|
217
|
+
* link:concepts/index.html[Core concepts and architecture]
|
|
218
|
+
* link:troubleshooting/index.html[Common problems and solutions]
|
data/docs/lychee.toml
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Lychee Link Checker Configuration
|
|
2
|
+
# For Omnizip Documentation
|
|
3
|
+
# https://github.com/lycheeverse/lychee
|
|
4
|
+
|
|
5
|
+
# Cache results to avoid re-checking same URLs
|
|
6
|
+
cache = true
|
|
7
|
+
max_cache_age = "1d"
|
|
8
|
+
|
|
9
|
+
# Check both source files and built site
|
|
10
|
+
include_verbatim = true
|
|
11
|
+
|
|
12
|
+
# Recursively check all files
|
|
13
|
+
recursive = true
|
|
14
|
+
|
|
15
|
+
# File types to check
|
|
16
|
+
include = [
|
|
17
|
+
"_site/**/*.html"
|
|
18
|
+
]
|
|
19
|
+
|
|
20
|
+
# Excluded paths
|
|
21
|
+
exclude = [
|
|
22
|
+
".git",
|
|
23
|
+
".github",
|
|
24
|
+
"node_modules",
|
|
25
|
+
"vendor",
|
|
26
|
+
".bundle",
|
|
27
|
+
".sass-cache",
|
|
28
|
+
".jekyll-cache"
|
|
29
|
+
]
|
|
30
|
+
|
|
31
|
+
# Link checking behavior
|
|
32
|
+
max_redirects = 10
|
|
33
|
+
max_retries = 3
|
|
34
|
+
timeout = 20
|
|
35
|
+
|
|
36
|
+
# Accept status codes
|
|
37
|
+
accept = [
|
|
38
|
+
"100..=103", # Informational
|
|
39
|
+
"200..=299", # Success
|
|
40
|
+
"429" # Too Many Requests (retry handled by max_retries)
|
|
41
|
+
]
|
|
42
|
+
|
|
43
|
+
# User agent to identify ourselves
|
|
44
|
+
user_agent = "lychee/omnizip-docs-link-checker"
|
|
45
|
+
|
|
46
|
+
# Check HTTP, HTTPS, and file:// schemes
|
|
47
|
+
scheme = ["https", "http", "file"]
|
|
48
|
+
|
|
49
|
+
# Include file:// URLs for local link checking
|
|
50
|
+
include_file = true
|
|
51
|
+
|
|
52
|
+
# Handle different link types
|
|
53
|
+
include_mail = false # Don't check mailto: links
|
|
54
|
+
|
|
55
|
+
# Follow links but don't check their content recursively
|
|
56
|
+
max_concurrency = 8
|
|
57
|
+
|
|
58
|
+
# Verbose output for debugging
|
|
59
|
+
verbose = "info"
|
|
60
|
+
|
|
61
|
+
# Require HTTPS where possible
|
|
62
|
+
require_https = false # Don't enforce
|
|
63
|
+
|
|
64
|
+
# Check fragment identifiers (anchors)
|
|
65
|
+
# include_fragments = true
|
|
66
|
+
|
|
67
|
+
index_files = ["index.html"]
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: API Overview
|
|
3
|
+
nav_order: 60
|
|
4
|
+
parent: Reference
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
== Ruby API Overview
|
|
8
|
+
|
|
9
|
+
=== General
|
|
10
|
+
|
|
11
|
+
Omnizip provides a comprehensive Ruby API for all compression and archive operations.
|
|
12
|
+
|
|
13
|
+
=== Requiring the Library
|
|
14
|
+
|
|
15
|
+
[source,ruby]
|
|
16
|
+
----
|
|
17
|
+
require 'omnizip'
|
|
18
|
+
----
|
|
19
|
+
|
|
20
|
+
=== Convenience Methods
|
|
21
|
+
|
|
22
|
+
==== File Operations
|
|
23
|
+
|
|
24
|
+
[source,ruby]
|
|
25
|
+
----
|
|
26
|
+
# Compress a file
|
|
27
|
+
Omnizip.compress_file('input.txt', 'output.lzma')
|
|
28
|
+
|
|
29
|
+
# Decompress a file
|
|
30
|
+
Omnizip.decompress_file('output.lzma', 'restored.txt')
|
|
31
|
+
|
|
32
|
+
# Extract archive
|
|
33
|
+
Omnizip.extract_archive('archive.7z', 'output/')
|
|
34
|
+
|
|
35
|
+
# List archive contents
|
|
36
|
+
Omnizip.list_archive('archive.7z')
|
|
37
|
+
----
|
|
38
|
+
|
|
39
|
+
==== Stream Operations
|
|
40
|
+
|
|
41
|
+
[source,ruby]
|
|
42
|
+
----
|
|
43
|
+
# Compress streams
|
|
44
|
+
File.open('input.txt', 'rb') do |input|
|
|
45
|
+
File.open('output.lzma', 'wb') do |output|
|
|
46
|
+
Omnizip.compress_stream(input, output)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Decompress streams
|
|
51
|
+
File.open('output.lzma', 'rb') do |input|
|
|
52
|
+
File.open('restored.txt', 'wb') do |output|
|
|
53
|
+
Omnizip.decompress_stream(input, output)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
----
|
|
57
|
+
|
|
58
|
+
=== Registry-Based API
|
|
59
|
+
|
|
60
|
+
==== Algorithm Registry
|
|
61
|
+
|
|
62
|
+
[source,ruby]
|
|
63
|
+
----
|
|
64
|
+
# List available algorithms
|
|
65
|
+
Omnizip::AlgorithmRegistry.registered.each do |name|
|
|
66
|
+
puts "Algorithm: #{name}"
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# Get algorithm instance
|
|
70
|
+
lzma = Omnizip::AlgorithmRegistry.get(:lzma).new(level: 9)
|
|
71
|
+
|
|
72
|
+
# Use algorithm
|
|
73
|
+
File.open('input.txt', 'rb') do |input|
|
|
74
|
+
File.open('output.lzma', 'wb') do |output|
|
|
75
|
+
lzma.compress(input, output)
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
----
|
|
79
|
+
|
|
80
|
+
==== Format Registry
|
|
81
|
+
|
|
82
|
+
[source,ruby]
|
|
83
|
+
----
|
|
84
|
+
# List available formats
|
|
85
|
+
Omnizip::FormatRegistry.registered.each do |name|
|
|
86
|
+
puts "Format: #{name}"
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# Create format-specific writer
|
|
90
|
+
writer = Omnizip::FormatRegistry.get(:seven_zip).new_writer('archive.7z')
|
|
91
|
+
writer.add_file('document.txt')
|
|
92
|
+
writer.close
|
|
93
|
+
----
|
|
94
|
+
|
|
95
|
+
=== Archive Operations
|
|
96
|
+
|
|
97
|
+
==== Creating Archives
|
|
98
|
+
|
|
99
|
+
[source,ruby]
|
|
100
|
+
----
|
|
101
|
+
# 7z archive
|
|
102
|
+
writer = Omnizip::Formats::SevenZip::Writer.new('archive.7z')
|
|
103
|
+
writer.add_file('document.txt')
|
|
104
|
+
writer.add_directory('photos/')
|
|
105
|
+
writer.close
|
|
106
|
+
|
|
107
|
+
# ZIP archive
|
|
108
|
+
writer = Omnizip::Formats::Zip::Writer.new('archive.zip')
|
|
109
|
+
writer.add_file('document.txt')
|
|
110
|
+
writer.close
|
|
111
|
+
----
|
|
112
|
+
|
|
113
|
+
==== Extracting Archives
|
|
114
|
+
|
|
115
|
+
[source,ruby]
|
|
116
|
+
----
|
|
117
|
+
# 7z archive
|
|
118
|
+
reader = Omnizip::Formats::SevenZip::Reader.new('archive.7z')
|
|
119
|
+
reader.extract_all('output/')
|
|
120
|
+
reader.close
|
|
121
|
+
|
|
122
|
+
# ZIP archive
|
|
123
|
+
reader = Omnizip::Formats::Zip::Reader.new('archive.zip')
|
|
124
|
+
reader.extract_all('output/')
|
|
125
|
+
reader.close
|
|
126
|
+
----
|
|
127
|
+
|
|
128
|
+
==== Listing Contents
|
|
129
|
+
|
|
130
|
+
[source,ruby]
|
|
131
|
+
----
|
|
132
|
+
reader = Omnizip::Formats::SevenZip::Reader.new('archive.7z')
|
|
133
|
+
reader.open
|
|
134
|
+
reader.each_file do |entry|
|
|
135
|
+
puts "#{entry.name}: #{entry.size} bytes"
|
|
136
|
+
end
|
|
137
|
+
reader.close
|
|
138
|
+
----
|
|
139
|
+
|
|
140
|
+
=== Error Handling
|
|
141
|
+
|
|
142
|
+
[source,ruby]
|
|
143
|
+
----
|
|
144
|
+
begin
|
|
145
|
+
Omnizip.compress_file('input.txt', 'output.lzma')
|
|
146
|
+
rescue Omnizip::CompressionError => e
|
|
147
|
+
puts "Compression failed: #{e.message}"
|
|
148
|
+
rescue Omnizip::AlgorithmNotFound => e
|
|
149
|
+
puts "Algorithm not found: #{e.message}"
|
|
150
|
+
rescue IOError => e
|
|
151
|
+
puts "I/O error: #{e.message}"
|
|
152
|
+
end
|
|
153
|
+
----
|
|
154
|
+
|
|
155
|
+
=== Progress Tracking
|
|
156
|
+
|
|
157
|
+
[source,ruby]
|
|
158
|
+
----
|
|
159
|
+
# Create tracker with callback
|
|
160
|
+
progress = Omnizip::ProgressTracker.new
|
|
161
|
+
|
|
162
|
+
Omnizip.compress_file('large.txt', 'large.lzma',
|
|
163
|
+
progress_callback: ->(percent) {
|
|
164
|
+
puts "Progress: #{percent}%" if percent % 10 == 0
|
|
165
|
+
}
|
|
166
|
+
)
|
|
167
|
+
----
|
|
168
|
+
|
|
169
|
+
=== Configuration
|
|
170
|
+
|
|
171
|
+
[source,ruby]
|
|
172
|
+
----
|
|
173
|
+
# Set default compression level
|
|
174
|
+
Omnizip.config.default_level = 7
|
|
175
|
+
|
|
176
|
+
# Set default algorithm
|
|
177
|
+
Omnizip.config.default_algorithm = :lzma2
|
|
178
|
+
|
|
179
|
+
# Enable verbose output
|
|
180
|
+
Omnizip.config.verbose = true
|
|
181
|
+
----
|
|
182
|
+
|
|
183
|
+
=== See Also
|
|
184
|
+
|
|
185
|
+
* link:compression-api[Compression API] - Compression details
|
|
186
|
+
* link:decompression-api[Decompression API] - Decompression details
|
|
187
|
+
* link:archive-api[Archive API] - Archive operations
|
|
188
|
+
* link:algorithm-registry[Algorithm Registry] - Algorithm management
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: compress - Compress Files
|
|
3
|
+
nav_order: 52
|
|
4
|
+
parent: Reference
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
== compress Command
|
|
8
|
+
|
|
9
|
+
=== General
|
|
10
|
+
|
|
11
|
+
Compress individual files using various compression algorithms.
|
|
12
|
+
|
|
13
|
+
=== Syntax
|
|
14
|
+
|
|
15
|
+
[source,bash]
|
|
16
|
+
----
|
|
17
|
+
omnizip compress [OPTIONS] INPUT OUTPUT
|
|
18
|
+
----
|
|
19
|
+
|
|
20
|
+
=== Arguments
|
|
21
|
+
|
|
22
|
+
`INPUT`:: Input file path (use `-` for stdin)
|
|
23
|
+
`OUTPUT`:: Output file path (use `-` for stdout)
|
|
24
|
+
|
|
25
|
+
=== Options
|
|
26
|
+
|
|
27
|
+
`--algorithm ALGORITHM`:: Compression algorithm (default: lzma)
|
|
28
|
+
`--format FORMAT`:: Archive format (zip, 7z) for pipe mode
|
|
29
|
+
`--level LEVEL`:: Compression level (1-9, default: 5)
|
|
30
|
+
`--entry-name NAME`:: Entry name for pipe mode
|
|
31
|
+
`--verbose`, `-v`:: Enable verbose output
|
|
32
|
+
|
|
33
|
+
=== Examples
|
|
34
|
+
|
|
35
|
+
==== Basic Compression
|
|
36
|
+
|
|
37
|
+
[source,bash]
|
|
38
|
+
----
|
|
39
|
+
omnizip compress input.txt output.lzma
|
|
40
|
+
----
|
|
41
|
+
|
|
42
|
+
==== With Algorithm
|
|
43
|
+
|
|
44
|
+
[source,bash]
|
|
45
|
+
----
|
|
46
|
+
# LZMA
|
|
47
|
+
omnizip compress input.txt output.lzma --algorithm lzma
|
|
48
|
+
|
|
49
|
+
# BZip2
|
|
50
|
+
omnizip compress input.txt output.bz2 --algorithm bzip2
|
|
51
|
+
|
|
52
|
+
# Zstandard
|
|
53
|
+
omnizip compress input.txt output.zst --algorithm zstandard
|
|
54
|
+
----
|
|
55
|
+
|
|
56
|
+
==== With Level
|
|
57
|
+
|
|
58
|
+
[source,bash]
|
|
59
|
+
----
|
|
60
|
+
# Fast
|
|
61
|
+
omnizip compress input.txt output.lzma --level 1
|
|
62
|
+
|
|
63
|
+
# Maximum
|
|
64
|
+
omnizip compress input.txt output.lzma --level 9
|
|
65
|
+
----
|
|
66
|
+
|
|
67
|
+
==== Pipe Mode
|
|
68
|
+
|
|
69
|
+
[source,bash]
|
|
70
|
+
----
|
|
71
|
+
# From stdin
|
|
72
|
+
cat input.txt | omnizip compress - output.lzma
|
|
73
|
+
|
|
74
|
+
# To stdout
|
|
75
|
+
omnizip compress input.txt - > output.lzma
|
|
76
|
+
|
|
77
|
+
# Full pipe
|
|
78
|
+
cat input.txt | omnizip compress - - | other-command
|
|
79
|
+
----
|
|
80
|
+
|
|
81
|
+
==== With Format
|
|
82
|
+
|
|
83
|
+
[source,bash]
|
|
84
|
+
----
|
|
85
|
+
# Create ZIP
|
|
86
|
+
cat input.txt | omnizip compress - output.zip --format zip
|
|
87
|
+
|
|
88
|
+
# Create 7z
|
|
89
|
+
cat input.txt | omnizip compress - output.7z --format 7z
|
|
90
|
+
----
|
|
91
|
+
|
|
92
|
+
=== Algorithms
|
|
93
|
+
|
|
94
|
+
Available algorithms:
|
|
95
|
+
|
|
96
|
+
* `lzma` - LZMA compression
|
|
97
|
+
* `lzma2` - LZMA2 compression (default)
|
|
98
|
+
* `bzip2` - BZip2 compression
|
|
99
|
+
* `ppmd7` - PPMd7 compression
|
|
100
|
+
* `deflate` - Deflate compression
|
|
101
|
+
* `zstandard` - Zstandard compression
|
|
102
|
+
|
|
103
|
+
=== Performance Tips
|
|
104
|
+
|
|
105
|
+
1. **Use level 1-3** for temporary files
|
|
106
|
+
2. **Use level 5-7** for general compression
|
|
107
|
+
3. **Use level 8-9** for long-term storage
|
|
108
|
+
4. **Use Zstandard** for speed-sensitive applications
|
|
109
|
+
5. **Use LZMA2** for maximum compression
|
|
110
|
+
|
|
111
|
+
=== See Also
|
|
112
|
+
|
|
113
|
+
* link:overview.html[CLI Overview] - Command-line interface
|
|
114
|
+
* link:../api/overview.html[Ruby API Overview] - Programmatic interface
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: CLI Overview
|
|
3
|
+
nav_order: 51
|
|
4
|
+
parent: Reference
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
== Command-Line Interface Overview
|
|
8
|
+
|
|
9
|
+
=== General
|
|
10
|
+
|
|
11
|
+
Omnizip provides a comprehensive command-line interface for all compression and archive operations.
|
|
12
|
+
|
|
13
|
+
=== Basic Syntax
|
|
14
|
+
|
|
15
|
+
[source,bash]
|
|
16
|
+
----
|
|
17
|
+
omnizip [global-options] COMMAND [command-options] [arguments]
|
|
18
|
+
----
|
|
19
|
+
|
|
20
|
+
=== Global Options
|
|
21
|
+
|
|
22
|
+
`--version`, `-v`:: Show version information
|
|
23
|
+
`--help`, `-h`:: Show help message
|
|
24
|
+
|
|
25
|
+
=== Available Commands
|
|
26
|
+
|
|
27
|
+
==== Compression Commands
|
|
28
|
+
|
|
29
|
+
* link:compress-command[`compress`] - Compress a file or stream
|
|
30
|
+
* link:decompress-command[`decompress`] - Decompress a file or stream
|
|
31
|
+
|
|
32
|
+
==== Archive Commands
|
|
33
|
+
|
|
34
|
+
* link:archive-command[`archive create`] - Create an archive
|
|
35
|
+
* link:archive-command[`archive extract`] - Extract an archive
|
|
36
|
+
* link:archive-command[`archive list`] - List archive contents
|
|
37
|
+
* link:archive-command[`archive metadata`] - View/edit archive metadata
|
|
38
|
+
|
|
39
|
+
==== Utility Commands
|
|
40
|
+
|
|
41
|
+
* link:list-command[`list`] - List available algorithms
|
|
42
|
+
* link:profile-command[`profile`] - Manage compression profiles
|
|
43
|
+
* link:convert-command[`convert`] - Convert between formats
|
|
44
|
+
|
|
45
|
+
=== Common Patterns
|
|
46
|
+
|
|
47
|
+
==== Pipe Mode
|
|
48
|
+
|
|
49
|
+
Use `-` for stdin/stdout:
|
|
50
|
+
|
|
51
|
+
[source,bash]
|
|
52
|
+
----
|
|
53
|
+
# Read from stdin
|
|
54
|
+
cat input.txt | omnizip compress - output.lzma
|
|
55
|
+
|
|
56
|
+
# Write to stdout
|
|
57
|
+
omnizip compress input.txt - > output.lzma
|
|
58
|
+
|
|
59
|
+
# Full pipe
|
|
60
|
+
cat input.txt | omnizip compress - - | omnizip decompress - output.txt
|
|
61
|
+
----
|
|
62
|
+
|
|
63
|
+
==== Verbosity
|
|
64
|
+
|
|
65
|
+
Enable detailed output with `--verbose`:
|
|
66
|
+
|
|
67
|
+
[source,bash]
|
|
68
|
+
----
|
|
69
|
+
omnizip compress input.txt output.lzma --verbose
|
|
70
|
+
----
|
|
71
|
+
|
|
72
|
+
==== Compression Levels
|
|
73
|
+
|
|
74
|
+
Most commands accept compression levels:
|
|
75
|
+
|
|
76
|
+
[source,bash]
|
|
77
|
+
----
|
|
78
|
+
# Fast (1-3)
|
|
79
|
+
omnizip compress input.txt output.lzma --level 1
|
|
80
|
+
|
|
81
|
+
# Balanced (4-6)
|
|
82
|
+
omnizip compress input.txt output.lzma --level 5
|
|
83
|
+
|
|
84
|
+
# Maximum (7-9)
|
|
85
|
+
omnizip compress input.txt output.lzma --level 9
|
|
86
|
+
----
|
|
87
|
+
|
|
88
|
+
=== Command Help
|
|
89
|
+
|
|
90
|
+
Each command supports `--help`:
|
|
91
|
+
|
|
92
|
+
[source,bash]
|
|
93
|
+
----
|
|
94
|
+
omnizip compress --help
|
|
95
|
+
omnizip archive create --help
|
|
96
|
+
omnizip profile list --help
|
|
97
|
+
----
|
|
98
|
+
|
|
99
|
+
=== Exit Codes
|
|
100
|
+
|
|
101
|
+
* `0` - Success
|
|
102
|
+
* `1` - Error occurred
|
|
103
|
+
* `2` - Invalid command or options
|
|
104
|
+
|
|
105
|
+
=== Environment Variables
|
|
106
|
+
|
|
107
|
+
`OMNIZIP_LEVEL`:: Default compression level (1-9)
|
|
108
|
+
`OMNIZIP_ALGORITHM`:: Default compression algorithm
|
|
109
|
+
`OMNIZIP_THREADS`:: Number of threads for parallel operations
|
|
110
|
+
|
|
111
|
+
=== Examples
|
|
112
|
+
|
|
113
|
+
==== Quick Backup
|
|
114
|
+
|
|
115
|
+
[source,bash]
|
|
116
|
+
----
|
|
117
|
+
# Create compressed backup
|
|
118
|
+
omnizip archive create backup.7z documents/ --level 7
|
|
119
|
+
|
|
120
|
+
# Verify
|
|
121
|
+
omnizip archive list backup.7z
|
|
122
|
+
|
|
123
|
+
# Extract to test
|
|
124
|
+
omnizip archive extract backup.7z /tmp/test/
|
|
125
|
+
----
|
|
126
|
+
|
|
127
|
+
==== Batch Processing
|
|
128
|
+
|
|
129
|
+
[source,bash]
|
|
130
|
+
----
|
|
131
|
+
# Compress all log files
|
|
132
|
+
for log in *.log; do
|
|
133
|
+
omnizip compress "$log" "${log}.lzma" --level 5
|
|
134
|
+
done
|
|
135
|
+
----
|
|
136
|
+
|
|
137
|
+
=== Related Sections
|
|
138
|
+
|
|
139
|
+
* link:compress-command.html[compress command] - Compress files
|
|
140
|
+
* link:../api/overview.html[Ruby API] - Programmatic interface
|