From 53de06dd05b6d9050ece283b100dea3ef05e1fda Mon Sep 17 00:00:00 2001 From: Timofey Solomko Date: Sat, 12 Jun 2021 13:16:37 +0300 Subject: [PATCH] Deploy to GH Pages [skip ci] --- 7-Zip.html | 369 ++++ Archives.html | 431 +++++ Classes/BZip2.html | 557 ++++++ Classes/BZip2/BlockSize.html | 561 ++++++ Classes/Deflate.html | 411 ++++ Classes/GzipArchive.html | 600 ++++++ Classes/GzipArchive/Member.html | 351 ++++ Classes/LZMA.html | 450 +++++ Classes/LZMA2.html | 353 ++++ Classes/SevenZipContainer.html | 420 ++++ Classes/TarContainer.html | 638 +++++++ Classes/TarContainer/Format.html | 412 ++++ Classes/XZArchive.html | 418 ++++ Classes/ZipContainer.html | 461 +++++ Classes/ZlibArchive.html | 412 ++++ Common Auxiliary Types.html | 432 +++++ Compression.html | 465 +++++ Enums/BZip2Error.html | 600 ++++++ Enums/CompressionMethod.html | 469 +++++ Enums/ContainerEntryType.html | 589 ++++++ Enums/DataError.html | 412 ++++ Enums/DeflateError.html | 410 ++++ Enums/FileSystemType.html | 445 +++++ Enums/GzipError.html | 509 +++++ Enums/LZ4.html | 710 +++++++ Enums/LZMA2Error.html | 411 ++++ Enums/LZMAError.html | 500 +++++ Enums/SevenZipError.html | 620 ++++++ Enums/TarCreateError.html | 329 ++++ Enums/TarError.html | 410 ++++ Enums/XZError.html | 575 ++++++ Enums/ZipError.html | 621 ++++++ Enums/ZipExtraFieldLocation.html | 349 ++++ Enums/ZlibError.html | 441 +++++ Errors.html | 663 +++++++ Protocols.html | 462 +++++ Protocols/Archive.html | 319 ++++ Protocols/CompressionAlgorithm.html | 319 ++++ Protocols/Container.html | 379 ++++ Protocols/ContainerEntry.html | 384 ++++ Protocols/ContainerEntryInfo.html | 499 +++++ Protocols/DecompressionAlgorithm.html | 319 ++++ Protocols/ZipExtraField.html | 463 +++++ Structs/DosAttributes.html | 529 +++++ Structs/GzipHeader.html | 592 ++++++ Structs/GzipHeader/ExtraField.html | 411 ++++ Structs/LZMAProperties.html | 480 +++++ Structs/Permissions.html | 709 +++++++ Structs/SevenZipEntry.html | 347 ++++ Structs/SevenZipEntryInfo.html | 696 +++++++ Structs/TarEntry.html | 416 ++++ Structs/TarEntryInfo.html | 1054 ++++++++++ Structs/TarReader.html | 437 +++++ Structs/TarWriter.html | 453 +++++ Structs/ZipEntry.html | 347 ++++ Structs/ZipEntryInfo.html | 861 +++++++++ Structs/ZlibHeader.html | 466 +++++ Structs/ZlibHeader/CompressionLevel.html | 411 ++++ TAR.html | 465 +++++ ZIP.html | 431 +++++ badge.svg | 28 + css/highlight.css | 202 ++ css/jazzy.css | 405 ++++ .../SWCompression.docset/Contents/Info.plist | 20 + .../Contents/Resources/Documents/7-Zip.html | 369 ++++ .../Resources/Documents/Archives.html | 431 +++++ .../Resources/Documents/Classes/BZip2.html | 557 ++++++ .../Documents/Classes/BZip2/BlockSize.html | 561 ++++++ .../Resources/Documents/Classes/Deflate.html | 411 ++++ .../Documents/Classes/GzipArchive.html | 600 ++++++ .../Documents/Classes/GzipArchive/Member.html | 351 ++++ .../Resources/Documents/Classes/LZMA.html | 450 +++++ .../Resources/Documents/Classes/LZMA2.html | 353 ++++ .../Documents/Classes/SevenZipContainer.html | 420 ++++ .../Documents/Classes/TarContainer.html | 638 +++++++ .../Classes/TarContainer/Format.html | 412 ++++ .../Documents/Classes/XZArchive.html | 418 ++++ .../Documents/Classes/ZipContainer.html | 461 +++++ .../Documents/Classes/ZlibArchive.html | 412 ++++ .../Documents/Common Auxiliary Types.html | 432 +++++ .../Resources/Documents/Compression.html | 465 +++++ .../Resources/Documents/Enums/BZip2Error.html | 600 ++++++ .../Documents/Enums/CompressionMethod.html | 469 +++++ .../Documents/Enums/ContainerEntryType.html | 589 ++++++ .../Resources/Documents/Enums/DataError.html | 412 ++++ .../Documents/Enums/DeflateError.html | 410 ++++ .../Documents/Enums/FileSystemType.html | 445 +++++ .../Resources/Documents/Enums/GzipError.html | 509 +++++ .../Resources/Documents/Enums/LZ4.html | 710 +++++++ .../Resources/Documents/Enums/LZMA2Error.html | 411 ++++ .../Resources/Documents/Enums/LZMAError.html | 500 +++++ .../Documents/Enums/SevenZipError.html | 620 ++++++ .../Documents/Enums/TarCreateError.html | 329 ++++ .../Resources/Documents/Enums/TarError.html | 410 ++++ .../Resources/Documents/Enums/XZError.html | 575 ++++++ .../Resources/Documents/Enums/ZipError.html | 621 ++++++ .../Enums/ZipExtraFieldLocation.html | 349 ++++ .../Resources/Documents/Enums/ZlibError.html | 441 +++++ .../Contents/Resources/Documents/Errors.html | 663 +++++++ .../Resources/Documents/Protocols.html | 462 +++++ .../Documents/Protocols/Archive.html | 319 ++++ .../Protocols/CompressionAlgorithm.html | 319 ++++ .../Documents/Protocols/Container.html | 379 ++++ .../Documents/Protocols/ContainerEntry.html | 384 ++++ .../Protocols/ContainerEntryInfo.html | 499 +++++ .../Protocols/DecompressionAlgorithm.html | 319 ++++ .../Documents/Protocols/ZipExtraField.html | 463 +++++ .../Documents/Structs/DosAttributes.html | 529 +++++ .../Documents/Structs/GzipHeader.html | 592 ++++++ .../Structs/GzipHeader/ExtraField.html | 411 ++++ .../Documents/Structs/LZMAProperties.html | 480 +++++ .../Documents/Structs/Permissions.html | 709 +++++++ .../Documents/Structs/SevenZipEntry.html | 347 ++++ .../Documents/Structs/SevenZipEntryInfo.html | 696 +++++++ .../Resources/Documents/Structs/TarEntry.html | 416 ++++ .../Documents/Structs/TarEntryInfo.html | 1054 ++++++++++ .../Documents/Structs/TarReader.html | 437 +++++ .../Documents/Structs/TarWriter.html | 453 +++++ .../Resources/Documents/Structs/ZipEntry.html | 347 ++++ .../Documents/Structs/ZipEntryInfo.html | 861 +++++++++ .../Documents/Structs/ZlibHeader.html | 466 +++++ .../Structs/ZlibHeader/CompressionLevel.html | 411 ++++ .../Contents/Resources/Documents/TAR.html | 465 +++++ .../Contents/Resources/Documents/ZIP.html | 431 +++++ .../Contents/Resources/Documents/badge.svg | 28 + .../Resources/Documents/css/highlight.css | 202 ++ .../Resources/Documents/css/jazzy.css | 405 ++++ .../Resources/Documents/img/carat.png | Bin 0 -> 274 bytes .../Contents/Resources/Documents/img/dash.png | Bin 0 -> 1338 bytes .../Contents/Resources/Documents/img/gh.png | Bin 0 -> 1571 bytes .../Resources/Documents/img/spinner.gif | Bin 0 -> 1849 bytes .../Contents/Resources/Documents/index.html | 492 +++++ .../Contents/Resources/Documents/js/jazzy.js | 74 + .../Resources/Documents/js/jazzy.search.js | 74 + .../Resources/Documents/js/jquery.min.js | 2 + .../Resources/Documents/js/lunr.min.js | 6 + .../Documents/js/typeahead.jquery.js | 1695 +++++++++++++++++ .../Contents/Resources/Documents/search.json | 1 + .../Resources/Documents/undocumented.json | 4 + .../Contents/Resources/docSet.dsidx | Bin 0 -> 90112 bytes docsets/SWCompression.tgz | Bin 0 -> 162803 bytes img/carat.png | Bin 0 -> 274 bytes img/dash.png | Bin 0 -> 1338 bytes img/gh.png | Bin 0 -> 1571 bytes img/spinner.gif | Bin 0 -> 1849 bytes index.html | 492 +++++ js/jazzy.js | 74 + js/jazzy.search.js | 74 + js/jquery.min.js | 2 + js/lunr.min.js | 6 + js/typeahead.jquery.js | 1695 +++++++++++++++++ search.json | 1 + undocumented.json | 4 + 153 files changed, 64092 insertions(+) create mode 100644 7-Zip.html create mode 100644 Archives.html create mode 100644 Classes/BZip2.html create mode 100644 Classes/BZip2/BlockSize.html create mode 100644 Classes/Deflate.html create mode 100644 Classes/GzipArchive.html create mode 100644 Classes/GzipArchive/Member.html create mode 100644 Classes/LZMA.html create mode 100644 Classes/LZMA2.html create mode 100644 Classes/SevenZipContainer.html create mode 100644 Classes/TarContainer.html create mode 100644 Classes/TarContainer/Format.html create mode 100644 Classes/XZArchive.html create mode 100644 Classes/ZipContainer.html create mode 100644 Classes/ZlibArchive.html create mode 100644 Common Auxiliary Types.html create mode 100644 Compression.html create mode 100644 Enums/BZip2Error.html create mode 100644 Enums/CompressionMethod.html create mode 100644 Enums/ContainerEntryType.html create mode 100644 Enums/DataError.html create mode 100644 Enums/DeflateError.html create mode 100644 Enums/FileSystemType.html create mode 100644 Enums/GzipError.html create mode 100644 Enums/LZ4.html create mode 100644 Enums/LZMA2Error.html create mode 100644 Enums/LZMAError.html create mode 100644 Enums/SevenZipError.html create mode 100644 Enums/TarCreateError.html create mode 100644 Enums/TarError.html create mode 100644 Enums/XZError.html create mode 100644 Enums/ZipError.html create mode 100644 Enums/ZipExtraFieldLocation.html create mode 100644 Enums/ZlibError.html create mode 100644 Errors.html create mode 100644 Protocols.html create mode 100644 Protocols/Archive.html create mode 100644 Protocols/CompressionAlgorithm.html create mode 100644 Protocols/Container.html create mode 100644 Protocols/ContainerEntry.html create mode 100644 Protocols/ContainerEntryInfo.html create mode 100644 Protocols/DecompressionAlgorithm.html create mode 100644 Protocols/ZipExtraField.html create mode 100644 Structs/DosAttributes.html create mode 100644 Structs/GzipHeader.html create mode 100644 Structs/GzipHeader/ExtraField.html create mode 100644 Structs/LZMAProperties.html create mode 100644 Structs/Permissions.html create mode 100644 Structs/SevenZipEntry.html create mode 100644 Structs/SevenZipEntryInfo.html create mode 100644 Structs/TarEntry.html create mode 100644 Structs/TarEntryInfo.html create mode 100644 Structs/TarReader.html create mode 100644 Structs/TarWriter.html create mode 100644 Structs/ZipEntry.html create mode 100644 Structs/ZipEntryInfo.html create mode 100644 Structs/ZlibHeader.html create mode 100644 Structs/ZlibHeader/CompressionLevel.html create mode 100644 TAR.html create mode 100644 ZIP.html create mode 100644 badge.svg create mode 100644 css/highlight.css create mode 100644 css/jazzy.css create mode 100644 docsets/SWCompression.docset/Contents/Info.plist create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/7-Zip.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Archives.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Classes/BZip2.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Classes/BZip2/BlockSize.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Classes/Deflate.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Classes/GzipArchive.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Classes/GzipArchive/Member.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Classes/LZMA.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Classes/LZMA2.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Classes/SevenZipContainer.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Classes/TarContainer.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Classes/TarContainer/Format.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Classes/XZArchive.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Classes/ZipContainer.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Classes/ZlibArchive.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Common Auxiliary Types.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Compression.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Enums/BZip2Error.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Enums/CompressionMethod.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Enums/ContainerEntryType.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Enums/DataError.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Enums/DeflateError.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Enums/FileSystemType.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Enums/GzipError.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Enums/LZ4.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Enums/LZMA2Error.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Enums/LZMAError.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Enums/SevenZipError.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Enums/TarCreateError.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Enums/TarError.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Enums/XZError.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Enums/ZipError.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Enums/ZipExtraFieldLocation.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Enums/ZlibError.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Errors.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Protocols.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/Archive.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/CompressionAlgorithm.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/Container.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/ContainerEntry.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/ContainerEntryInfo.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/DecompressionAlgorithm.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/ZipExtraField.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Structs/DosAttributes.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Structs/GzipHeader.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Structs/GzipHeader/ExtraField.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Structs/LZMAProperties.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Structs/Permissions.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Structs/SevenZipEntry.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Structs/SevenZipEntryInfo.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Structs/TarEntry.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Structs/TarEntryInfo.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Structs/TarReader.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Structs/TarWriter.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZipEntry.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZipEntryInfo.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZlibHeader.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZlibHeader/CompressionLevel.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/TAR.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/ZIP.html create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/badge.svg create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/css/highlight.css create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/css/jazzy.css create mode 100755 docsets/SWCompression.docset/Contents/Resources/Documents/img/carat.png create mode 100755 docsets/SWCompression.docset/Contents/Resources/Documents/img/dash.png create mode 100755 docsets/SWCompression.docset/Contents/Resources/Documents/img/gh.png create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/img/spinner.gif create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/index.html create mode 100755 docsets/SWCompression.docset/Contents/Resources/Documents/js/jazzy.js create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/js/jazzy.search.js create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/js/jquery.min.js create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/js/lunr.min.js create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/js/typeahead.jquery.js create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/search.json create mode 100644 docsets/SWCompression.docset/Contents/Resources/Documents/undocumented.json create mode 100644 docsets/SWCompression.docset/Contents/Resources/docSet.dsidx create mode 100644 docsets/SWCompression.tgz create mode 100755 img/carat.png create mode 100755 img/dash.png create mode 100755 img/gh.png create mode 100644 img/spinner.gif create mode 100644 index.html create mode 100755 js/jazzy.js create mode 100644 js/jazzy.search.js create mode 100644 js/jquery.min.js create mode 100644 js/lunr.min.js create mode 100644 js/typeahead.jquery.js create mode 100644 search.json create mode 100644 undocumented.json diff --git a/7-Zip.html b/7-Zip.html new file mode 100644 index 00000000..5da99d58 --- /dev/null +++ b/7-Zip.html @@ -0,0 +1,369 @@ + + + + 7-Zip Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

7-Zip

+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/Archives.html b/Archives.html new file mode 100644 index 00000000..b49d4a44 --- /dev/null +++ b/Archives.html @@ -0,0 +1,431 @@ + + + + Archives Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Archives

+ +
+
+ +
+
+
+
    +
  • +
    + + + + GzipArchive + +
    +
    +
    +
    +
    +
    +

    Provides unarchive and archive functions for GZip archives.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class GzipArchive : Archive
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + GzipHeader + +
    +
    +
    +
    +
    +
    +

    Represents the header of a GZip archive.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct GzipHeader
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + XZArchive + +
    +
    +
    +
    +
    +
    +

    Provides unarchive function for XZ archives.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class XZArchive : Archive
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + ZlibArchive + +
    +
    +
    +
    +
    +
    +

    Provides unarchive and archive functions for Zlib archives.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class ZlibArchive : Archive
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + ZlibHeader + +
    +
    +
    +
    +
    +
    +

    Represents the header of a Zlib archive.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ZlibHeader
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Classes/BZip2.html b/Classes/BZip2.html new file mode 100644 index 00000000..89d944c3 --- /dev/null +++ b/Classes/BZip2.html @@ -0,0 +1,557 @@ + + + + BZip2 Class Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

BZip2

+
+
+ +
public class BZip2 : DecompressionAlgorithm
+
extension BZip2: CompressionAlgorithm
+ +
+
+

Provides functions for compression and decompression for BZip2 algorithm.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + decompress(data:) + +
    +
    +
    +
    +
    +
    +

    Decompresses data using BZip2 algortihm.

    +
    +

    Throws

    +

    BZip2Error if unexpected byte (bit) sequence was encountered in data. +It may indicate that either data is damaged or it might not be compressed with BZip2 at all.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func decompress(data: Data) throws -> Data
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + data + + +
    +

    Data compressed with BZip2.

    +
    +
    +
    +
    +

    Return Value

    +

    Decompressed data.

    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Decompresses one or more concatenated BZip2 archives found in data.

    +
    +

    Throws

    +

    BZip2Error if an unexpected byte (bit) sequence was encountered or a checksum mismatch is detected for +any archive. It may indicate that the input is damaged or it might not be compressed with BZip2 at all. If +BZip2Error.wrongCRC is thrown, its associated value contains only the bytes decompressed for the archive that +failed the checksum.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func multiDecompress(data: Data) throws -> [Data]
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + data + + +
    +

    Data that may contain one or more concatenated BZip2 archives.

    +
    +
    +
    +
    +

    Return Value

    +

    An array of decompressed data, one element per archive, in the same order as they appear in the input.

    +
    + +
    +
    +
  • +
  • +
    + + + + BlockSize + +
    +
    +
    +
    +
    +
    +

    Represents the size of the blocks in which data is split during BZip2 compression.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum BlockSize : Int
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + compress(data:) + +
    +
    +
    +
    +
    +
    +

    Compresses data with BZip2 algortihm.

    +
    +

    Note

    +

    Input data will be split into blocks of size 100 KB. Use BZip2.compress(data:blockSize:) function to +specify the size of a block.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func compress(data: Data) -> Data
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + data + + +
    +

    Data to compress.

    +
    +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Compresses data with BZip2 algortihm, splitting data into blocks of specified blockSize.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func compress(data: Data, blockSize: BlockSize) -> Data
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + data + + +
    +

    Data to compress.

    +
    +
    + + blockSize + + +
    +

    Size of blocks in which data will be split.

    +
    +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Classes/BZip2/BlockSize.html b/Classes/BZip2/BlockSize.html new file mode 100644 index 00000000..dd45b542 --- /dev/null +++ b/Classes/BZip2/BlockSize.html @@ -0,0 +1,561 @@ + + + + BlockSize Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

BlockSize

+
+
+ +
public enum BlockSize : Int
+ +
+
+

Represents the size of the blocks in which data is split during BZip2 compression.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + one + +
    +
    +
    +
    +
    +
    +

    100 KB.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case one = 1
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + two + +
    +
    +
    +
    +
    +
    +

    200 KB.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case two = 2
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + three + +
    +
    +
    +
    +
    +
    +

    300 KB.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case three = 3
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + four + +
    +
    +
    +
    +
    +
    +

    400 KB.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case four = 4
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + five + +
    +
    +
    +
    +
    +
    +

    500 KB.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case five = 5
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + six + +
    +
    +
    +
    +
    +
    +

    600 KB.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case six = 6
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + seven + +
    +
    +
    +
    +
    +
    +

    700 KB.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case seven = 7
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + eight + +
    +
    +
    +
    +
    +
    +

    800 KB.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case eight = 8
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + nine + +
    +
    +
    +
    +
    +
    +

    900 KB.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case nine = 9
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Classes/Deflate.html b/Classes/Deflate.html new file mode 100644 index 00000000..738bfbfa --- /dev/null +++ b/Classes/Deflate.html @@ -0,0 +1,411 @@ + + + + Deflate Class Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Deflate

+
+
+ +
public class Deflate : DecompressionAlgorithm
+
extension Deflate: CompressionAlgorithm
+ +
+
+

Provides functions for compression and decompression for Deflate algorithm.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + decompress(data:) + +
    +
    +
    +
    +
    +
    +

    Decompresses data using Deflate algortihm.

    +
    +

    Note

    +

    This function is specification compliant.

    + +
    +

    Throws

    +

    DeflateError if unexpected byte (bit) sequence was encountered in data. +It may indicate that either data is damaged or it might not be compressed with Deflate at all.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func decompress(data: Data) throws -> Data
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + data + + +
    +

    Data compressed with Deflate.

    +
    +
    +
    +
    +

    Return Value

    +

    Decompressed data.

    +
    + +
    +
    +
  • +
  • +
    + + + + compress(data:) + +
    +
    +
    +
    +
    +
    +

    Compresses data with Deflate algortihm.

    +
    +

    Note

    +

    Currently, SWCompression creates only one block for all data +and the block can either be uncompressed or compressed with static Huffman encoding. +Choice of one block type or the other depends on bytes’ statistics of data. +However, if data size is greater than 65535 (the maximum value stored in 2 bytes), +then static Huffman block will be created.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func compress(data: Data) -> Data
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + data + + +
    +

    Data to compress.

    +
    +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Classes/GzipArchive.html b/Classes/GzipArchive.html new file mode 100644 index 00000000..072149df --- /dev/null +++ b/Classes/GzipArchive.html @@ -0,0 +1,600 @@ + + + + GzipArchive Class Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

GzipArchive

+
+
+ +
public class GzipArchive : Archive
+ +
+
+

Provides unarchive and archive functions for GZip archives.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + Member + +
    +
    +
    +
    +
    +
    +

    Represents the member of a multi-member GZip archive.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Member
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + unarchive(archive:) + +
    +
    +
    +
    +
    +
    +

    Unarchives GZip archive.

    +
    +

    Note

    +

    This function is specification compliant.

    + +
    +

    Throws

    +

    DeflateError or GzipError depending on the type of the problem. +It may indicate that either archive is damaged or it might not be archived with GZip +or compressed with Deflate at all.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func unarchive(archive data: Data) throws -> Data
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + archive + + +
    +

    Data archived with GZip.

    +
    +
    +
    +
    +

    Return Value

    +

    Unarchived data.

    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Unarchives multi-member GZip archive. +Multi-member GZip archives are essentially several GZip archives following each other in a single file.

    +
    +

    Throws

    +

    DeflateError or GzipError depending on the type of the problem. +It may indicate that one of the members of archive is damaged or +it might not be archived with GZip or compressed with Deflate at all.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func multiUnarchive(archive data: Data) throws -> [Member]
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + archive + + +
    +

    GZip archive with one or more members.

    +
    +
    +
    +
    +

    Return Value

    +

    Unarchived data.

    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Archives data into GZip archive, using various specified options. +Data will be also compressed with Deflate algorithm. +It will be also specified in archive’s header that the compressor used the slowest Deflate algorithm.

    +
    +

    Note

    +

    This function is specification compliant.

    + +
    +

    Throws

    +

    GzipError.cannotEncodeISOLatin1 if a file name or a comment cannot be encoded with ISO-Latin-1 encoding +or if the total sum of the binary content length of all extra fields plus 4 for each field exceeds UInt16.max.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func archive(data: Data, comment: String? = nil, fileName: String? = nil,
    +                           writeHeaderCRC: Bool = false, isTextFile: Bool = false,
    +                           osType: FileSystemType? = nil, modificationTime: Date? = nil,
    +                           extraFields: [GzipHeader.ExtraField] = []) throws -> Data
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + data + + +
    +

    Data to compress and archive.

    +
    +
    + + comment + + +
    +

    Additional comment, which will be stored as a separate field in archive.

    +
    +
    + + fileName + + +
    +

    Name of the file which will be archived.

    +
    +
    + + writeHeaderCRC + + +
    +

    Set to true, if you want to store consistency check for archive’s header.

    +
    +
    + + isTextFile + + +
    +

    Set to true, if the file which will be archived is text file or ASCII-file.

    +
    +
    + + osType + + +
    +

    Type of the system on which this archive will be created.

    +
    +
    + + modificationTime + + +
    +

    Last time the file was modified.

    +
    +
    + + extraFields + + +
    +

    Any extra fields. Note that no extra field is allowed to have second byte of the extra +field (subfield) ID equal to zero. In addition, the length of a field’s binary content must be less than +UInt16.max, while the total sum of the binary content length of all extra fields plus 4 for each field must also +not exceed UInt16.max. See GZip format specification for more details.

    +
    +
    +
    +
    +

    Return Value

    +

    Resulting archive’s data.

    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Classes/GzipArchive/Member.html b/Classes/GzipArchive/Member.html new file mode 100644 index 00000000..90750834 --- /dev/null +++ b/Classes/GzipArchive/Member.html @@ -0,0 +1,351 @@ + + + + Member Structure Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Member

+
+
+ +
public struct Member
+ +
+
+

Represents the member of a multi-member GZip archive.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + header + +
    +
    +
    +
    +
    +
    +

    GZip header of a member.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let header: GzipHeader
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + data + +
    +
    +
    +
    +
    +
    +

    Unarchived data from a member.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let data: Data
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Classes/LZMA.html b/Classes/LZMA.html new file mode 100644 index 00000000..261dff40 --- /dev/null +++ b/Classes/LZMA.html @@ -0,0 +1,450 @@ + + + + LZMA Class Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LZMA

+
+
+ +
public class LZMA : DecompressionAlgorithm
+ +
+
+

Provides decompression function for LZMA.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + decompress(data:) + +
    +
    +
    +
    +
    +
    +

    Decompresses data using LZMA.

    +
    +

    Note

    +

    It is assumed that the first nine bytes of data represent standard LZMA properties (so called “lc”, “lp” +and “pb”), dictionary size, and uncompressed size all encoded with standard encoding scheme of LZMA format.

    + +
    +

    Throws

    +

    LZMAError if unexpected byte (bit) sequence was encountered in data. It may indicate that either data +is damaged or it might not be compressed with LZMA at all.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func decompress(data: Data) throws -> Data
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + data + + +
    +

    Data compressed with LZMA.

    +
    +
    +
    +
    +

    Return Value

    +

    Decompressed data.

    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Decompresses data using LZMA with specified algorithm’s properties, and, optionally, output’s +uncompressedSize. If uncompressedSize is nil, then data must contain finish marker.

    +
    +

    Note

    +

    It is assumed that data begins immediately with LZMA compressed bytes with no LZMA properties at the +beginning.

    + +
    +

    Warning

    +

    There is no validation performed for properties of properties argument. This API is intended to be +used by advanced users.

    + +
    +

    Throws

    +

    LZMAError if unexpected byte (bit) sequence was encountered in data. It may indicate that either data +is damaged or it might not be compressed with LZMA at all.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func decompress(data: Data,
    +                              properties: LZMAProperties,
    +                              uncompressedSize: Int? = nil) throws -> Data
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + data + + +
    +

    Data compressed with LZMA.

    +
    +
    + + properties + + +
    +

    Properties of LZMA (such as lc, lp, etc.)

    +
    +
    + + uncompressedSize + + +
    +

    Size of uncompressed data; nil if it is unknown. In case of nil, finish marker +must be present in data.

    +
    +
    +
    +
    +

    Return Value

    +

    Decompressed data.

    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Classes/LZMA2.html b/Classes/LZMA2.html new file mode 100644 index 00000000..801fa439 --- /dev/null +++ b/Classes/LZMA2.html @@ -0,0 +1,353 @@ + + + + LZMA2 Class Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LZMA2

+
+
+ +
public class LZMA2 : DecompressionAlgorithm
+ +
+
+

Provides decompression function for LZMA2 algorithm.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + decompress(data:) + +
    +
    +
    +
    +
    +
    +

    Decompresses data using LZMA2 algortihm.

    +
    +

    Note

    +

    It is assumed that the first byte of data is a dictionary size encoded with standard encoding scheme of +LZMA2 format.

    + +
    +

    Throws

    +

    LZMAError or LZMA2Error if unexpected byte (bit) sequence was encountered in data. +It may indicate that either data is damaged or it might not be compressed with LZMA2 at all.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func decompress(data: Data) throws -> Data
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + data + + +
    +

    Data compressed with LZMA2.

    +
    +
    +
    +
    +

    Return Value

    +

    Decompressed data.

    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Classes/SevenZipContainer.html b/Classes/SevenZipContainer.html new file mode 100644 index 00000000..13af4938 --- /dev/null +++ b/Classes/SevenZipContainer.html @@ -0,0 +1,420 @@ + + + + SevenZipContainer Class Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

SevenZipContainer

+
+
+ +
public class SevenZipContainer : Container
+ +
+
+

Provides functions for work with 7-Zip containers.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + open(container:) + +
    +
    +
    +
    +
    +
    +

    Processes 7-Zip container and returns an array of SevenZipEntry with information and data for all entries.

    +
    +

    Important

    +

    The order of entries is defined by 7-Zip container and, particularly, by the creator of a given 7-Zip +container. It is likely that directories will be encountered earlier than files stored in those directories, but no +particular order is guaranteed.

    + +
    +

    Throws

    +

    SevenZipError or any other error associated with compression type depending on the type of the problem. +It may indicate that either container is damaged or it might not be 7-Zip container at all.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func open(container data: Data) throws -> [SevenZipEntry]
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + container + + +
    +

    7-Zip container’s data.

    +
    +
    +
    +
    +

    Return Value

    +

    Array of SevenZipEntry.

    +
    + +
    +
    +
  • +
  • +
    + + + + info(container:) + +
    +
    +
    +
    +
    +
    +

    Processes 7-Zip container and returns an array of SevenZipEntryInfo with information about entries in this +container.

    +
    +

    Important

    +

    The order of entries is defined by 7-Zip container and, particularly, by the creator of a given 7-Zip +container. It is likely that directories will be encountered earlier than files stored in those directories, but no +particular order is guaranteed.

    + +
    +

    Throws

    +

    SevenZipError or any other error associated with compression type depending on the type of the problem. +It may indicate that either container is damaged or it might not be 7-Zip container at all.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func info(container data: Data) throws -> [SevenZipEntryInfo]
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + container + + +
    +

    7-Zip container’s data.

    +
    +
    +
    +
    +

    Return Value

    +

    Array of SevenZipEntryInfo.

    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Classes/TarContainer.html b/Classes/TarContainer.html new file mode 100644 index 00000000..00efa8d9 --- /dev/null +++ b/Classes/TarContainer.html @@ -0,0 +1,638 @@ + + + + TarContainer Class Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

TarContainer

+
+
+ +
public class TarContainer : Container
+ +
+
+

Provides functions for work with TAR containers.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + Format + +
    +
    +
    +
    +
    +
    +

    Represents the “format” of a TAR container: a minimal set of extensions to basic TAR format required to +successfully read a particular container.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Format
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + formatOf(container:) + +
    +
    +
    +
    +
    +
    +

    Processes TAR container and returns its “format”: a minimal set of extensions to basic TAR format required to +successfully read this container.

    +
    +

    Throws

    +

    TarError, which may indicate that either container is damaged or it might not be TAR container at all.

    + +
    +

    See also

    +

    TarContainer.Format

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func formatOf(container data: Data) throws -> Format
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + container + + +
    +

    TAR container’s data.

    +
    +
    +
    + +
    +
    +
  • +
  • +
    + + + + create(from:) + +
    +
    +
    +
    +
    +
    +

    Creates a new TAR container with entries as its content and generates its Data.

    +
    +

    See also

    +

    TarEntryInfo properties documenation to see how their values are connected with the specific TAR +format used during container creation.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func create(from entries: [TarEntry]) -> Data
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + entries + + +
    +

    TAR entries to store in the container.

    +
    +
    +
    + +
    +
    +
  • +
  • +
    + + + + create(from:force:) + +
    +
    +
    +
    +
    +
    +

    Creates a new TAR container with entries as its content and generates its Data using the specified format.

    + +

    This function forces the usage of the format, meaning that certain properties of the entries may be missing +from the resulting container data if the chosen format does not support corresponding features. For example, +relatively long names (and linknames) will be truncated if the .ustar or .prePosix format is specified.

    + +

    It is highly recommended to use the TarContainer.create(from:) function (or use the .pax format) to ensure the +best representation of the entries in the output. Other (non-PAX) formats should only be used if you have a +specific need for them and you understand limitations of those formats.

    +
    +

    See also

    +

    TarEntryInfo properties documenation to see how their values are connected with the specific TAR +format used during container creation.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func create(from entries: [TarEntry], force format: TarContainer.Format) -> Data
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + entries + + +
    +

    TAR entries to store in the container.

    +
    +
    + + force + + +
    +

    Force the usage of the specified format.

    +
    +
    +
    + +
    +
    +
  • +
  • +
    + + + + open(container:) + +
    +
    +
    +
    +
    +
    +

    Processes TAR container and returns an array of TarEntry with information and data for all entries.

    +
    +

    Important

    +

    The order of entries is defined by TAR container and, particularly, by the creator of a given TAR +container. It is likely that directories will be encountered earlier than files stored in those directories, but no +particular order is guaranteed.

    + +
    +

    Throws

    +

    TarError, which may indicate that either container is damaged or it might not be TAR container at all.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func open(container data: Data) throws -> [TarEntry]
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + container + + +
    +

    TAR container’s data.

    +
    +
    +
    +
    +

    Return Value

    +

    Array of TarEntry.

    +
    + +
    +
    +
  • +
  • +
    + + + + info(container:) + +
    +
    +
    +
    +
    +
    +

    Processes TAR container and returns an array of TarEntryInfo with information about entries in this container.

    +
    +

    Important

    +

    The order of entries is defined by TAR container and, particularly, by the creator of a given TAR +container. It is likely that directories will be encountered earlier than files stored in those directories, but no +particular order is guaranteed.

    + +
    +

    Throws

    +

    TarError, which may indicate that either container is damaged or it might not be TAR container at all.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func info(container data: Data) throws -> [TarEntryInfo]
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + container + + +
    +

    TAR container’s data.

    +
    +
    +
    +
    +

    Return Value

    +

    Array of TarEntryInfo.

    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Classes/TarContainer/Format.html b/Classes/TarContainer/Format.html new file mode 100644 index 00000000..a684cc95 --- /dev/null +++ b/Classes/TarContainer/Format.html @@ -0,0 +1,412 @@ + + + + Format Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Format

+
+
+ +
public enum Format
+ +
+
+

Represents the “format” of a TAR container: a minimal set of extensions to basic TAR format required to +successfully read a particular container.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + prePosix + +
    +
    +
    +
    +
    +
    +

    Pre POSIX format (aka “basic TAR format”).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case prePosix
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + ustar + +
    +
    +
    +
    +
    +
    +

    “UStar” format introduced by POSIX IEEE P1003.1 standard.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case ustar
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + gnu + +
    +
    +
    +
    +
    +
    +

    “UStar”-like format with GNU extensions (e.g. special container entries for long file and link names).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case gnu
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + pax + +
    +
    +
    +
    +
    +
    +

    “PAX” format introduced by POSIX.1-2001 standard, a set of extensions to “UStar” format.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case pax
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Classes/XZArchive.html b/Classes/XZArchive.html new file mode 100644 index 00000000..b8f1fcd8 --- /dev/null +++ b/Classes/XZArchive.html @@ -0,0 +1,418 @@ + + + + XZArchive Class Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

XZArchive

+
+
+ +
public class XZArchive : Archive
+ +
+
+

Provides unarchive function for XZ archives.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + unarchive(archive:) + +
    +
    +
    +
    +
    +
    +

    Unarchives XZ archive. Archives with multiple streams are supported, +but uncompressed data from each stream will be combined into single Data object.

    + +

    If an error happens during LZMA2 decompression, then LZMAError or LZMA2Error will be thrown.

    +
    +

    Throws

    +

    LZMAError, LZMA2Error or XZError depending on the type of the problem. +Particularly, if filters other than LZMA2 are used in archive, then XZError.wrongFilterID will be thrown, +but it may also indicate that either the archive is damaged or +it might not be compressed with XZ or LZMA(2) at all.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func unarchive(archive data: Data) throws -> Data
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + archive + + +
    +

    Data archived using XZ format.

    +
    +
    +
    +
    +

    Return Value

    +

    Unarchived data.

    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Unarchives XZ archive. Archives with multiple streams are supported, +and uncompressed data from each stream will be stored in a separate element in the array

    + +

    If data passed is not actually XZ archive, XZError will be thrown. +Particularly, if filters other than LZMA2 are used in archive, then XZError.wrongFilterID will be thrown.

    + +

    If an error happens during LZMA2 decompression, then LZMAError or LZMA2Error will be thrown.

    +
    +

    Throws

    +

    LZMAError, LZMA2Error or XZError depending on the type of the problem. +It may indicate that either the archive is damaged or it might not be compressed with XZ or LZMA(2) at all.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func splitUnarchive(archive data: Data) throws -> [Data]
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + archive + + +
    +

    Data archived using XZ format.

    +
    +
    +
    +
    +

    Return Value

    +

    Array of unarchived data from every stream in archive.

    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Classes/ZipContainer.html b/Classes/ZipContainer.html new file mode 100644 index 00000000..77ba21ec --- /dev/null +++ b/Classes/ZipContainer.html @@ -0,0 +1,461 @@ + + + + ZipContainer Class Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ZipContainer

+
+
+ +
public class ZipContainer : Container
+ +
+
+

Provides functions for work with ZIP containers.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + customExtraFields + +
    +
    +
    +
    +
    +
    +

    Contains user-defined extra fields. When either ZipContainer.info(container:) or ZipContainer.open(container:) +function encounters extra field without built-in support, it uses this dictionary and tries to find a corresponding +user-defined extra field. If an approriate custom extra field is found and successfully processed, then the result +is stored in ZipEntryInfo.customExtraFields.

    + +

    To enable support of custom extra field one must add a new entry to this dictionary. The value of this entry must +be a user-defined type which conforms to ZipExtraField protocol. The key must be equal to the ID of user-defined +extra field and type’s id property.

    +
    +

    Warning

    + Modifying this dictionary while either info(container:) or open(container:) function is being +executed may cause undefined behavior. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var customExtraFields: [UInt16 : any ZipExtraField.Type]
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + open(container:) + +
    +
    +
    +
    +
    +
    +

    Processes ZIP container and returns an array of ZipEntry with information and data for all entries.

    +
    +

    Important

    +

    The order of entries is defined by ZIP container and, particularly, by the creator of a given ZIP +container. It is likely that directories will be encountered earlier than files stored in those directories, but no +particular order is guaranteed.

    + +
    +

    Throws

    +

    ZipError or any other error associated with compression type, depending on the type of the problem. +It may indicate that either container is damaged or it might not be ZIP container at all.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func open(container data: Data) throws -> [ZipEntry]
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + container + + +
    +

    ZIP container’s data.

    +
    +
    +
    +
    +

    Return Value

    +

    Array of ZipEntry.

    +
    + +
    +
    +
  • +
  • +
    + + + + info(container:) + +
    +
    +
    +
    +
    +
    +

    Processes ZIP container and returns an array of ZipEntryInfo with information about entries in this container.

    +
    +

    Important

    +

    The order of entries is defined by ZIP container and, particularly, by the creator of a given ZIP +container. It is likely that directories will be encountered earlier than files stored in those directories, but no +particular order is guaranteed.

    + +
    +

    Throws

    +

    ZipError, which may indicate that either container is damaged or it might not be ZIP container at all.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func info(container data: Data) throws -> [ZipEntryInfo]
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + container + + +
    +

    ZIP container’s data.

    +
    +
    +
    +
    +

    Return Value

    +

    Array of ZipEntryInfo.

    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Classes/ZlibArchive.html b/Classes/ZlibArchive.html new file mode 100644 index 00000000..2b452d67 --- /dev/null +++ b/Classes/ZlibArchive.html @@ -0,0 +1,412 @@ + + + + ZlibArchive Class Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ZlibArchive

+
+
+ +
public class ZlibArchive : Archive
+ +
+
+

Provides unarchive and archive functions for Zlib archives.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + unarchive(archive:) + +
    +
    +
    +
    +
    +
    +

    Unarchives Zlib archive.

    +
    +

    Note

    +

    This function is specification compliant.

    + +
    +

    Throws

    +

    DeflateError or ZlibError depending on the type of the problem. +It may indicate that either archive is damaged or it might not be archived with Zlib +or compressed with Deflate at all.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func unarchive(archive data: Data) throws -> Data
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + archive + + +
    +

    Data archived with Zlib.

    +
    +
    +
    +
    +

    Return Value

    +

    Unarchived data.

    +
    + +
    +
    +
  • +
  • +
    + + + + archive(data:) + +
    +
    +
    +
    +
    +
    +

    Archives data into Zlib archive. Data will be also compressed with Deflate algorithm. +It will also be specified in archive’s header that the compressor used the slowest Deflate algorithm.

    +
    +

    Note

    +

    This function is specification compliant.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func archive(data: Data) -> Data
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + data + + +
    +

    Data to compress and archive.

    +
    +
    +
    +
    +

    Return Value

    +

    Resulting archive’s data.

    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Common Auxiliary Types.html b/Common Auxiliary Types.html new file mode 100644 index 00000000..98117738 --- /dev/null +++ b/Common Auxiliary Types.html @@ -0,0 +1,432 @@ + + + + Common Auxiliary Types Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Common Auxiliary Types

+ +
+
+ +
+
+
+
    +
  • +
    + + + + ContainerEntryType + +
    +
    +
    +
    +
    +
    +

    Represents the type of a container entry.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ContainerEntryType
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + DosAttributes + +
    +
    +
    +
    +
    +
    +

    Represents file attributes in DOS format.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct DosAttributes : OptionSet
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + Permissions + +
    +
    +
    +
    +
    +
    +

    Represents file access permissions in UNIX format.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Permissions : OptionSet
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + CompressionMethod + +
    +
    +
    +
    +
    +
    +

    Represents a (de)compression method.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CompressionMethod
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + FileSystemType + +
    +
    +
    +
    +
    +
    +

    Represents the type of the file system on which an archive or container was created. File system determines the meaning +of file attributes.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum FileSystemType
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Compression.html b/Compression.html new file mode 100644 index 00000000..e94e3ffd --- /dev/null +++ b/Compression.html @@ -0,0 +1,465 @@ + + + + Compression Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Compression

+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/Enums/BZip2Error.html b/Enums/BZip2Error.html new file mode 100644 index 00000000..b7c65114 --- /dev/null +++ b/Enums/BZip2Error.html @@ -0,0 +1,600 @@ + + + + BZip2Error Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

BZip2Error

+
+
+ +
public enum BZip2Error : Error
+ +
+
+

Represents an error which happened during BZip2 decompression. +It may indicate that either data is damaged or it might not be compressed with BZip2 at all.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + wrongMagic + +
    +
    +
    +
    +
    +
    +

    ‘Magic’ number is not 0x425a.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongMagic
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongVersion + +
    +
    +
    +
    +
    +
    +

    BZip version is not 2.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongVersion
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongBlockSize + +
    +
    +
    +
    +
    +
    +

    Unsupported block size (not from ‘0’ to ‘9’).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongBlockSize
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongBlockType + +
    +
    +
    +
    +
    +
    +

    Unsupported block type (is neither ‘pi’ nor ‘sqrt(pi)’).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongBlockType
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + randomizedBlock + +
    +
    +
    +
    +
    +
    +

    Block is randomized.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case randomizedBlock
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongHuffmanGroups + +
    +
    +
    +
    +
    +
    +

    Wrong number of Huffman tables/groups (should be between 2 and 6).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongHuffmanGroups
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongSelector + +
    +
    +
    +
    +
    +
    +

    Selector is greater than the total number of Huffman tables/groups.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongSelector
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Wrong length of Huffman code (should be between 0 and 20).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongHuffmanCodeLength
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + symbolNotFound + +
    +
    +
    +
    +
    +
    +

    Symbol wasn’t found in Huffman tree.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case symbolNotFound
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongCRC(_:) + +
    +
    +
    +
    +
    +
    +

    Computed checksum of the uncompressed data does not match the value stored in the archive. +Associated value contains the data that were successfully decompressed up to the point where the mismatch was +detected.

    + +
      +
    • When using BZip2.decompress(data:): The associated value comes from a single BZip2 archive. If the mismatch +happens at the final checksum verification, this is usually the entire decompressed output.

    • +
    • When using BZip2.multiDecompress(data:): The input may contain several concatenated BZip2 archives. The error +is thrown for the current archive that fails the checksum. The associated value contains only the data decompressed +for that archive. Results from earlier archives are not included and are not returned once this error is thrown.

    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongCRC(Data)
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Enums/CompressionMethod.html b/Enums/CompressionMethod.html new file mode 100644 index 00000000..37ac4082 --- /dev/null +++ b/Enums/CompressionMethod.html @@ -0,0 +1,469 @@ + + + + CompressionMethod Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

CompressionMethod

+
+
+ +
public enum CompressionMethod
+ +
+
+

Represents a (de)compression method.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + bzip2 + +
    +
    +
    +
    +
    +
    +

    BZip2.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case bzip2
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + copy + +
    +
    +
    +
    +
    +
    +

    Copy (no compression).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case copy
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + deflate + +
    +
    +
    +
    +
    +
    +

    Deflate.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case deflate
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + lzma + +
    +
    +
    +
    +
    +
    +

    LZMA.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case lzma
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + lzma2 + +
    +
    +
    +
    +
    +
    +

    LZMA 2.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case lzma2
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + other + +
    +
    +
    +
    +
    +
    +

    Other/unknown method.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case other
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Enums/ContainerEntryType.html b/Enums/ContainerEntryType.html new file mode 100644 index 00000000..abf986e8 --- /dev/null +++ b/Enums/ContainerEntryType.html @@ -0,0 +1,589 @@ + + + + ContainerEntryType Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ContainerEntryType

+
+
+ +
public enum ContainerEntryType
+ +
+
+

Represents the type of a container entry.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + blockSpecial + +
    +
    +
    +
    +
    +
    +

    Block special file.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case blockSpecial
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + characterSpecial + +
    +
    +
    +
    +
    +
    +

    Character special file.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case characterSpecial
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + contiguous + +
    +
    +
    +
    +
    +
    +

    Contiguous file.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case contiguous
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + directory + +
    +
    +
    +
    +
    +
    +

    Directory.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case directory
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + fifo + +
    +
    +
    +
    +
    +
    +

    FIFO special file.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fifo
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + hardLink + +
    +
    +
    +
    +
    +
    +

    Hard link.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case hardLink
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + regular + +
    +
    +
    +
    +
    +
    +

    Regular file.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case regular
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + socket + +
    +
    +
    +
    +
    +
    +

    Socket.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case socket
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + symbolicLink + +
    +
    +
    +
    +
    +
    +

    Symbolic link.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case symbolicLink
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + unknown + +
    +
    +
    +
    +
    +
    +

    Entry type is unknown.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case unknown
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Enums/DataError.html b/Enums/DataError.html new file mode 100644 index 00000000..02f658c7 --- /dev/null +++ b/Enums/DataError.html @@ -0,0 +1,412 @@ + + + + DataError Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

DataError

+
+
+ +
public enum DataError : Error, Equatable
+ +
+
+

Represents an error which happened during processing input data.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + truncated + +
    +
    +
    +
    +
    +
    +

    Indicates that input data is likely truncated or incomplete.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case truncated
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + corrupted + +
    +
    +
    +
    +
    +
    +

    Indicates that input data is corrupted, e.g. does not conform to the format specifications or contains other +invalid values.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case corrupted
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + checksumMismatch(_:) + +
    +
    +
    +
    +
    +
    +

    Indicates that the computed checksum of the output data does not match the stored checksum. While usually the +associated value contains the output from all processed inputs up to and including the point when this error was +thrown, it is still recommended to check the documenation of a function to confirm this.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case checksumMismatch([Data])
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + unsupportedFeature + +
    +
    +
    +
    +
    +
    +

    Indicates that input data was created using a feature that is not supported by the processing function.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case unsupportedFeature
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Enums/DeflateError.html b/Enums/DeflateError.html new file mode 100644 index 00000000..3db48763 --- /dev/null +++ b/Enums/DeflateError.html @@ -0,0 +1,410 @@ + + + + DeflateError Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

DeflateError

+
+
+ +
public enum DeflateError : Error
+ +
+
+

Represents an error which happened during Deflate compression or decompression. +It may indicate that either the data is damaged or it might not be compressed with Deflate at all.

+ + +
+
+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Uncompressed block’s length and nlength bytes isn’t consistent with each other.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongUncompressedBlockLengths
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongBlockType + +
    +
    +
    +
    +
    +
    +

    Unknown block type (not 0, 1 or 2).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongBlockType
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongSymbol + +
    +
    +
    +
    +
    +
    +

    Decoded symbol was found in Huffman tree but is unknown.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongSymbol
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + symbolNotFound + +
    +
    +
    +
    +
    +
    +

    Symbol wasn’t found in Huffman tree.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case symbolNotFound
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Enums/FileSystemType.html b/Enums/FileSystemType.html new file mode 100644 index 00000000..0e201d68 --- /dev/null +++ b/Enums/FileSystemType.html @@ -0,0 +1,445 @@ + + + + FileSystemType Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

FileSystemType

+
+
+ +
public enum FileSystemType
+ +
+
+

Represents the type of the file system on which an archive or container was created. File system determines the meaning +of file attributes.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + fat + +
    +
    +
    +
    +
    +
    +

    FAT filesystem.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fat
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + macintosh + +
    +
    +
    +
    +
    +
    +

    Filesystem of older Macintosh systems.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case macintosh
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + ntfs + +
    +
    +
    +
    +
    +
    +

    NTFS.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case ntfs
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + other + +
    +
    +
    +
    +
    +
    +

    Other/unknown file system.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case other
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + unix + +
    +
    +
    +
    +
    +
    +

    One of many file systems of UNIX-like OS.

    +
    +

    Note

    + Modern macOS systems also fall into this category. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case unix
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Enums/GzipError.html b/Enums/GzipError.html new file mode 100644 index 00000000..9987baa1 --- /dev/null +++ b/Enums/GzipError.html @@ -0,0 +1,509 @@ + + + + GzipError Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

GzipError

+
+
+ +
public enum GzipError : Error
+ +
+
+

Represents an error which happened while processing a GZip archive. +It may indicate that either archive is damaged or it might not be GZip archive at all.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + wrongMagic + +
    +
    +
    +
    +
    +
    +

    First two bytes (‘magic’ number) of archive isn’t 31 and 139.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongMagic
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Compression method used in archive is different from Deflate, which is the only supported one.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongCompressionMethod
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongFlags + +
    +
    +
    +
    +
    +
    +

    One of the reserved fields in archive has an unexpected value, which can also mean (apart from damaged archive), +that archive uses a newer version of GZip format.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongFlags
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongHeaderCRC + +
    +
    +
    +
    +
    +
    +

    Computed CRC of archive’s header doesn’t match the value stored in archive.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongHeaderCRC
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongCRC(_:) + +
    +
    +
    +
    +
    +
    +

    Computed checksum of uncompressed data doesn’t match the value stored in the archive. +Associated value of the error contains GzipArchive.Members for all already decompressed data:

    + +
      +
    • if unarchive function was called then associated array will have only one element, +since this function always processes only first member of archive.
    • +
    • if multiUnarchive function was called then associated array will have an element +for each already decompressed member, including the one with mismatching checksum.
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongCRC([GzipArchive.Member])
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongISize + +
    +
    +
    +
    +
    +
    +

    Computed ‘isize’ didn’t match the value stored in the archive.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongISize
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + cannotEncodeISOLatin1 + +
    +
    +
    +
    +
    +
    +

    Either specified file name or comment cannot be encoded using ISO Latin-1 encoding.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case cannotEncodeISOLatin1
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Enums/LZ4.html b/Enums/LZ4.html new file mode 100644 index 00000000..05fbff16 --- /dev/null +++ b/Enums/LZ4.html @@ -0,0 +1,710 @@ + + + + LZ4 Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LZ4

+
+
+ +
public enum LZ4 : DecompressionAlgorithm
+
extension LZ4: CompressionAlgorithm
+ +
+
+

Provides functions for compression and decompression for LZ4 algorithm.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + decompress(data:) + +
    +
    +
    +
    +
    +
    +

    Decompresses data using LZ4 algortihm.

    + +

    Use LZ4.decompress(data:dictionary:dictionaryID:) instead, if the data was compressed with an external dictionary. +Otherwise, the decompression will result in an error or incorrect output.

    +
    +

    Throws

    +

    DataError.corrupted or DataError.truncated if the data is corrupted or truncated. +DataError.checksumMismatch is thrown with uncompressed data as its associated value if the computed checksum of +the uncompressed data does not match the stored checksum. DataError.unsupportedFeature is thrown when the value +of a field inside the frame, such as uncompressed data size, is incompatible with the maximum integer size of the +current platform.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func decompress(data: Data) throws -> Data
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + data + + +
    +

    Data compressed with LZ4. If data represents several concatenated LZ4 frames, only the first +frame will be processed; use LZ4.multiDecompress(data:dictionary:dictionaryID:) instead to decompress all the +frames.

    +
    +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Decompresses data using LZ4 algortihm and provided external dictionary.

    +
    +

    Throws

    +

    DataError.corrupted or DataError.truncated if the data is corrupted or truncated. +DataError.checksumMismatch is thrown with uncompressed data as its associated value if the computed checksum of +the uncompressed data does not match the stored checksum. DataError.unsupportedFeature is thrown when the value +of a field inside the frame, such as uncompressed data size, is incompatible with the maximum integer size of the +current platform.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func decompress(data: Data, dictionary: Data?, dictionaryID: UInt32? = nil) throws -> Data
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + data + + +
    +

    Data compressed with LZ4. If data represents several concatenated LZ4 frames, only the first +frame will be processed; use LZ4.multiDecompress(data:dictionary:dictionaryID:) instead to decompress all the +frames.

    +
    +
    + + dictionary + + +
    +

    External dictionary which will be used during decompression. Providing incorrect dictionary +(not the one that was used for compression), no dictionary at all (if one was used for compression), or providing a +dictionary when no dictionary was used for compression will result in an error or incorrect output.

    +
    +
    + + dictionaryID + + +
    +

    Optional dictionary ID, which must match the one stored in the frame. If no dictionary +ID is present in the frame, then this argument is ignored.

    +
    +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Decompresses data, which may represent several concatenated LZ4 frames, using LZ4 algortihm and provided external +dictionary.

    +
    +

    Throws

    +

    DataError.corrupted or DataError.truncated if the data is corrupted or truncated. +DataError.checksumMismatch is thrown if the computed checksum of the uncompressed data does not match the stored +checksum. The associated value in this case contains uncompressed data from all the frames up to and including the +one that caused this error. DataError.unsupportedFeature is thrown when the value of a field inside a frame, such +as uncompressed data size, is incompatible with the maximum integer size of the current platform.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func multiDecompress(data: Data, dictionary: Data? = nil, dictionaryID: UInt32? = nil) throws -> [Data]
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + data + + +
    +

    Data compressed with LZ4. If data represents several concatenated LZ4 frames, all of them will +be processed.

    +
    +
    + + dictionary + + +
    +

    External dictionary which will be used during decompression of all encountered frames. +Providing incorrect dictionary (not the one that was used for compression), no dictionary at all (if one was used +for compression), or providing a dictionary when no dictionary was used for compression will result in an error or +incorrect output.

    +
    +
    + + dictionaryID + + +
    +

    Optional dictionary ID, which must match the one stored in all frames. If no dictionary +ID is present in a frame, then this argument is ignored for that frame.

    +
    +
    +
    +
    +

    Return Value

    +

    An array with uncompressed data from each processed non-skippable LZ4 frame as its elements.

    +
    + +
    +
    +
  • +
  • +
    + + + + compress(data:) + +
    +
    +
    +
    +
    +
    +

    Compresses data using LZ4 algortihm with default format and algorithm options.

    + +

    The default options include: independent blocks, do not save checksums for compressed blocks, save the checksum of +the uncompressed data, do not save the size of the uncompressed data, use 4 MB block size, no dictionary.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func compress(data: Data) -> Data
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Compresses data using LZ4 algortihm.

    + +

    This function allows to customize format and alogrithm options or use an external dictionary to compress the data.

    +
    +

    Precondition

    +

    blockSize must be greater than zero and less than or equal to 4194304 (4 MB).

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func compress(data: Data, independentBlocks: Bool, blockChecksums: Bool,
    +                             contentChecksum: Bool, contentSize: Bool, blockSize: Int = 4 * 1024 * 1024,
    +                             dictionary: Data? = nil, dictionaryID: UInt32? = nil) -> Data
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + data + + +
    +

    Data to compress.

    +
    +
    + + independentBlocks + + +
    +

    True, if compressed blocks should be independent of each other. Setting this to +false may improve compression ratio at the cost of decompression speed.

    +
    +
    + + blockChecksums + + +
    +

    True, if the checksums of the compressed blocks should be stored in the output.

    +
    +
    + + contentChecksum + + +
    +

    True, if the checksum of the uncompressed data should be stored in the output.

    +
    +
    + + contentSize + + +
    +

    True, if the size of the uncompressed data should be stored in the output.

    +
    +
    + + blockSize + + +
    +

    Size of uncompressed blocks in bytes. The default and maximum value is 4194304 (4 MB).

    +
    +
    + + dictionary + + +
    +

    External dictionary which will be used during compression. The same dictionary then must +be used for successful decompression.

    +
    +
    + + dictionaryID + + +
    +

    Optional dictionary ID which will be stored in the output. The same dictionary ID then +is likely to be required for successful decompression.

    +
    +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Enums/LZMA2Error.html b/Enums/LZMA2Error.html new file mode 100644 index 00000000..028d6869 --- /dev/null +++ b/Enums/LZMA2Error.html @@ -0,0 +1,411 @@ + + + + LZMA2Error Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LZMA2Error

+
+
+ +
public enum LZMA2Error : Error
+ +
+
+

Represents an error which happened during LZMA2 decompression. +It may indicate that either data is damaged or it might not be compressed with LZMA2 at all.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + wrongDictionarySize + +
    +
    +
    +
    +
    +
    +

    Dictionary size is too big, or has reserved bits set, or is in incorrect format in general.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongDictionarySize
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongControlByte + +
    +
    +
    +
    +
    +
    +

    Unknown conrol byte value of LZMA2 packet.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongControlByte
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongReset + +
    +
    +
    +
    +
    +
    +

    Unknown reset instruction encountered in LZMA2 packet.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongReset
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongSizes + +
    +
    +
    +
    +
    +
    +

    Either size of decompressed data isn’t equal to the one specified in LZMA2 packet or +amount of compressed data read is different from the one stored in LZMA2 packet.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongSizes
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Enums/LZMAError.html b/Enums/LZMAError.html new file mode 100644 index 00000000..3aac5c6d --- /dev/null +++ b/Enums/LZMAError.html @@ -0,0 +1,500 @@ + + + + LZMAError Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LZMAError

+
+
+ +
public enum LZMAError : Error
+ +
+
+

Represents an error which happened during LZMA decompression. +It may indicate that either data is damaged or it might not be compressed with LZMA at all.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + wrongProperties + +
    +
    +
    +
    +
    +
    +

    Properties’ byte is greater than 225.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongProperties
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + rangeDecoderInitError + +
    +
    +
    +
    +
    +
    +

    Unable to initialize RanderDecorer.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case rangeDecoderInitError
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Size of uncompressed data hit specified limit in the middle of decoding.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case exceededUncompressedSize
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + windowIsEmpty + +
    +
    +
    +
    +
    +
    +

    Unable to perfrom repeat-distance decoding because there is nothing to repeat.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case windowIsEmpty
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    End of stream marker is reached, but range decoder is in incorrect state.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case rangeDecoderFinishError
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + repeatWillExceed + +
    +
    +
    +
    +
    +
    +

    The number of bytes to repeat is greater than the amount bytes that is left to decode.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case repeatWillExceed
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + notEnoughToRepeat + +
    +
    +
    +
    +
    +
    +

    The amount of already decoded bytes is smaller than repeat length.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case notEnoughToRepeat
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Enums/SevenZipError.html b/Enums/SevenZipError.html new file mode 100644 index 00000000..6a3bc34f --- /dev/null +++ b/Enums/SevenZipError.html @@ -0,0 +1,620 @@ + + + + SevenZipError Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

SevenZipError

+
+
+ +
public enum SevenZipError : Error
+ +
+
+

Represents an error which happened while processing a 7-Zip container. +It may indicate that either container is damaged or it might not be 7-Zip container at all.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + wrongSignature + +
    +
    +
    +
    +
    +
    +

    Wrong container’s signature.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongSignature
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongFormatVersion + +
    +
    +
    +
    +
    +
    +

    Unsupported version of container’s format.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongFormatVersion
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongCRC + +
    +
    +
    +
    +
    +
    +

    CRC either of one of the files from the container or one of the container’s strucutures is incorrect.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongCRC
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongSize + +
    +
    +
    +
    +
    +
    +

    Size either of one of the files from the container or one of the container’s strucutures is incorrect.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongSize
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + startPosNotSupported + +
    +
    +
    +
    +
    +
    +

    Files have StartPos property. This feature isn’t supported.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case startPosNotSupported
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + externalNotSupported + +
    +
    +
    +
    +
    +
    +

    External feature isn’t supported.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case externalNotSupported
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Coders with multiple in and/or out streams aren’t supported.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case multiStreamNotSupported
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Additional streams feature isn’t supported.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case additionalStreamsNotSupported
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Entry is compressed using unsupported compression method.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case compressionNotSupported
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Entry or container’s header is encrypted. This feature isn’t supported.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case encryptionNotSupported
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Unknown/incorrect internal 7-Zip structure was encountered or a required internal structure is missing.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case internalStructureError
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Enums/TarCreateError.html b/Enums/TarCreateError.html new file mode 100644 index 00000000..12738204 --- /dev/null +++ b/Enums/TarCreateError.html @@ -0,0 +1,329 @@ + + + + TarCreateError Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

TarCreateError

+
+
+ +
public enum TarCreateError : Error
+ +
+
+

Represents an error which happened during the creation of a new TAR container.

+
+

Note

+ This error type is never used and will be removed in the next major update. + +
+ + +
+
+ +
+
+
+
    +
  • +
    + + + + utf8NonEncodable + +
    +
    +
    +
    +
    +
    +

    One of the TarEntryInfo‘s string properties (such as name) cannot be encoded with UTF-8 encoding.

    +
    +

    Note

    + This error is never thrown and will be removed in the next major update. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case utf8NonEncodable
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Enums/TarError.html b/Enums/TarError.html new file mode 100644 index 00000000..e93462a7 --- /dev/null +++ b/Enums/TarError.html @@ -0,0 +1,410 @@ + + + + TarError Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

TarError

+
+
+ +
public enum TarError : Error
+ +
+
+

Represents an error which happened while processing a TAR container. +It may indicate that either container is damaged or it might not be TAR container at all.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + tooSmallFileIsPassed + +
    +
    +
    +
    +
    +
    +

    Data is unexpectedly truncated.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case tooSmallFileIsPassed
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongField + +
    +
    +
    +
    +
    +
    +

    Failed to process a required TAR header’s field.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongField
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongHeaderChecksum + +
    +
    +
    +
    +
    +
    +

    Computed checksum of a header doesn’t match the value stored in container.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongHeaderChecksum
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongPaxHeaderEntry + +
    +
    +
    +
    +
    +
    +

    Entry from PAX extended header is in incorrect format.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongPaxHeaderEntry
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Enums/XZError.html b/Enums/XZError.html new file mode 100644 index 00000000..7f22aae8 --- /dev/null +++ b/Enums/XZError.html @@ -0,0 +1,575 @@ + + + + XZError Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

XZError

+
+
+ +
public enum XZError : Error
+ +
+
+

Represents an error which happened while unarchiving an XZ archive. +It may indicate that either archive is damaged or it might not be XZ archive at all.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + wrongMagic + +
    +
    +
    +
    +
    +
    +

    Either ‘magic’ number in header or footer isn’t equal to a predefined value.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongMagic
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongField + +
    +
    +
    +
    +
    +
    +

    One of the special fields in archive has an incorrect value, +which can mean both damaged archive or that archive uses a newer version of XZ format.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongField
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongInfoCRC + +
    +
    +
    +
    +
    +
    +

    Checksum of one of the fields of archive doesn’t match the value stored in archive.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongInfoCRC
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongFilterID + +
    +
    +
    +
    +
    +
    +

    Filter used in archive is unsupported.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongFilterID
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + checkTypeSHA256 + +
    +
    +
    +
    +
    +
    +

    Archive uses SHA-256 checksum which is unsupported.

    +
    +

    Note

    + This error is never thrown and will be removed in the next major update. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case checkTypeSHA256
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongDataSize + +
    +
    +
    +
    +
    +
    +

    Either size of decompressed data isn’t equal to the one specified in archive or +amount of compressed data read is different from the one stored in archive.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongDataSize
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongCheck(_:) + +
    +
    +
    +
    +
    +
    +

    Computed checksum of uncompressed data doesn’t match the value stored in the archive. +Associated value of the error contains already decompressed data:

    + +
      +
    • if unarchive function was called then associated array will have only one element +with combined data for all already decompressed streams, including the one with mismatching checksum.
    • +
    • if splitUnarchive function was called then associated array will have an element +for each already decompressed stream, including the one with mismatching checksum.
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongCheck([Data])
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongPadding + +
    +
    +
    +
    +
    +
    +

    Padding (null-bytes appended to an archive’s structure) is incorrect.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongPadding
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + multiByteIntegerError + +
    +
    +
    +
    +
    +
    +

    Either null byte encountered or exceeded maximum amount bytes while reading multi byte number.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case multiByteIntegerError
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Enums/ZipError.html b/Enums/ZipError.html new file mode 100644 index 00000000..de573f27 --- /dev/null +++ b/Enums/ZipError.html @@ -0,0 +1,621 @@ + + + + ZipError Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ZipError

+
+
+ +
public enum ZipError : Error
+ +
+
+

Represents an error which happened while processing a ZIP container. +It may indicate that either container is damaged or it might not be ZIP container at all.

+ + +
+
+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    End of Central Directoty record wasn’t found.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case notFoundCentralDirectoryEnd
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongSignature + +
    +
    +
    +
    +
    +
    +

    Wrong signature of one of container’s structures.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongSignature
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongSize + +
    +
    +
    +
    +
    +
    +

    Wrong either compressed or uncompressed size of a container’s entry.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongSize
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongVersion + +
    +
    +
    +
    +
    +
    +

    Version needed to process container is unsupported.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongVersion
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Container is either spanned or consists of several volumes. These features aren’t supported.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case multiVolumesNotSupported
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Entry or record is encrypted. This feature isn’t supported.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case encryptionNotSupported
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + patchingNotSupported + +
    +
    +
    +
    +
    +
    +

    Entry contains patched data. This feature isn’t supported.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case patchingNotSupported
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Entry is compressed using unsupported compression method.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case compressionNotSupported
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongLocalHeader + +
    +
    +
    +
    +
    +
    +

    Local header of an entry is inconsistent with Central Directory.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongLocalHeader
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongCRC(_:) + +
    +
    +
    +
    +
    +
    +

    Computed checksum of entry’s data doesn’t match the value stored in the archive. +Associated value of the error contains ZipEntry objects for all already processed entries:

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongCRC([ZipEntry])
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongTextField + +
    +
    +
    +
    +
    +
    +

    Either entry’s comment or file name cannot be processed using UTF-8 encoding.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongTextField
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Enums/ZipExtraFieldLocation.html b/Enums/ZipExtraFieldLocation.html new file mode 100644 index 00000000..14161e9b --- /dev/null +++ b/Enums/ZipExtraFieldLocation.html @@ -0,0 +1,349 @@ + + + + ZipExtraFieldLocation Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ZipExtraFieldLocation

+
+
+ +
public enum ZipExtraFieldLocation
+ +
+
+

Location of ZIP extra field inside a container.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + centralDirectory + +
    +
    +
    +
    +
    +
    +

    ZIP extra field is located in container’s Central Directory.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case centralDirectory
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + localHeader + +
    +
    +
    +
    +
    +
    +

    ZIP extra field is located in one of container’s Local Headers.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case localHeader
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Enums/ZlibError.html b/Enums/ZlibError.html new file mode 100644 index 00000000..6dae2917 --- /dev/null +++ b/Enums/ZlibError.html @@ -0,0 +1,441 @@ + + + + ZlibError Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ZlibError

+
+
+ +
public enum ZlibError : Error
+ +
+
+

Represents an error which happened while processing a Zlib archive. +It may indicate that either archive is damaged or it might not be Zlib archive at all.

+ + +
+
+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Compression method used in archive is different from Deflate, which is the only supported one.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongCompressionMethod
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongCompressionInfo + +
    +
    +
    +
    +
    +
    +

    Compression info has value incompatible with Deflate compression method.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongCompressionInfo
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongFcheck + +
    +
    +
    +
    +
    +
    +

    First two bytes of archive’s flags are inconsistent with each other.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongFcheck
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongCompressionLevel + +
    +
    +
    +
    +
    +
    +

    Compression level has value, which is different from the supported ones.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongCompressionLevel
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongAdler32(_:) + +
    +
    +
    +
    +
    +
    +

    Computed checksum of uncompressed data doesn’t match the value stored in archive. +Associated value of the error contains already decompressed data.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongAdler32(Data)
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Errors.html b/Errors.html new file mode 100644 index 00000000..b8fa3bc4 --- /dev/null +++ b/Errors.html @@ -0,0 +1,663 @@ + + + + Errors Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Errors

+ +
+
+ +
+
+
+
    +
  • +
    + + + + BZip2Error + +
    +
    +
    +
    +
    +
    +

    Represents an error which happened during BZip2 decompression. +It may indicate that either data is damaged or it might not be compressed with BZip2 at all.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum BZip2Error : Error
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + DataError + +
    +
    +
    +
    +
    +
    +

    Represents an error which happened during processing input data.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum DataError : Error, Equatable
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + DeflateError + +
    +
    +
    +
    +
    +
    +

    Represents an error which happened during Deflate compression or decompression. +It may indicate that either the data is damaged or it might not be compressed with Deflate at all.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum DeflateError : Error
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + GzipError + +
    +
    +
    +
    +
    +
    +

    Represents an error which happened while processing a GZip archive. +It may indicate that either archive is damaged or it might not be GZip archive at all.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum GzipError : Error
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + LZMAError + +
    +
    +
    +
    +
    +
    +

    Represents an error which happened during LZMA decompression. +It may indicate that either data is damaged or it might not be compressed with LZMA at all.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum LZMAError : Error
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + LZMA2Error + +
    +
    +
    +
    +
    +
    +

    Represents an error which happened during LZMA2 decompression. +It may indicate that either data is damaged or it might not be compressed with LZMA2 at all.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum LZMA2Error : Error
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + SevenZipError + +
    +
    +
    +
    +
    +
    +

    Represents an error which happened while processing a 7-Zip container. +It may indicate that either container is damaged or it might not be 7-Zip container at all.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum SevenZipError : Error
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + TarCreateError + +
    +
    +
    +
    +
    +
    +

    Represents an error which happened during the creation of a new TAR container.

    +
    +

    Note

    + This error type is never used and will be removed in the next major update. + +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum TarCreateError : Error
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + TarError + +
    +
    +
    +
    +
    +
    +

    Represents an error which happened while processing a TAR container. +It may indicate that either container is damaged or it might not be TAR container at all.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum TarError : Error
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + XZError + +
    +
    +
    +
    +
    +
    +

    Represents an error which happened while unarchiving an XZ archive. +It may indicate that either archive is damaged or it might not be XZ archive at all.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum XZError : Error
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + ZipError + +
    +
    +
    +
    +
    +
    +

    Represents an error which happened while processing a ZIP container. +It may indicate that either container is damaged or it might not be ZIP container at all.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ZipError : Error
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + ZlibError + +
    +
    +
    +
    +
    +
    +

    Represents an error which happened while processing a Zlib archive. +It may indicate that either archive is damaged or it might not be Zlib archive at all.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ZlibError : Error
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Protocols.html b/Protocols.html new file mode 100644 index 00000000..daa1c27b --- /dev/null +++ b/Protocols.html @@ -0,0 +1,462 @@ + + + + Protocols Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Protocols

+ +
+
+ +
+
+
+
    +
  • +
    + + + + Archive + +
    +
    +
    +
    +
    +
    +

    A type that represents an archive.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol Archive
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + Container + +
    +
    +
    +
    +
    +
    +

    A type that represents a container with files, directories and/or other data.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol Container
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + ContainerEntry + +
    +
    +
    +
    +
    +
    +

    A type that represents an entry from the container with its data and information.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol ContainerEntry
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + ContainerEntryInfo + +
    +
    +
    +
    +
    +
    +

    A type that provides access to information about an entry from the container.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol ContainerEntryInfo
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + CompressionAlgorithm + +
    +
    +
    +
    +
    +
    +

    A type that provides an implementation of a particular compression algorithm.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol CompressionAlgorithm
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    A type that provides an implementation of a particular decompression algorithm.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol DecompressionAlgorithm
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Protocols/Archive.html b/Protocols/Archive.html new file mode 100644 index 00000000..73354815 --- /dev/null +++ b/Protocols/Archive.html @@ -0,0 +1,319 @@ + + + + Archive Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Archive

+
+
+ +
public protocol Archive
+ +
+
+

A type that represents an archive.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + unarchive(archive:) + +
    +
    +
    +
    +
    +
    +

    Unarchive data from the archive.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static func unarchive(archive: Data) throws -> Data
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Protocols/CompressionAlgorithm.html b/Protocols/CompressionAlgorithm.html new file mode 100644 index 00000000..67bb1580 --- /dev/null +++ b/Protocols/CompressionAlgorithm.html @@ -0,0 +1,319 @@ + + + + CompressionAlgorithm Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

CompressionAlgorithm

+
+
+ +
public protocol CompressionAlgorithm
+ +
+
+

A type that provides an implementation of a particular compression algorithm.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + compress(data:) + +
    +
    +
    +
    +
    +
    +

    Compress data with particular algorithm.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static func compress(data: Data) throws -> Data
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Protocols/Container.html b/Protocols/Container.html new file mode 100644 index 00000000..ad970b30 --- /dev/null +++ b/Protocols/Container.html @@ -0,0 +1,379 @@ + + + + Container Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Container

+
+
+ +
public protocol Container
+ +
+
+

A type that represents a container with files, directories and/or other data.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + Entry + +
    +
    +
    +
    +
    +
    +

    A type that represents an entry from this container.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    associatedtype Entry : ContainerEntry
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + open(container:) + +
    +
    +
    +
    +
    +
    +

    Retrieve all container entries with their data.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static func open(container: Data) throws -> [Entry]
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + info(container:) + +
    +
    +
    +
    +
    +
    +

    Retrieve information about all container entries (without their data).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static func info(container: Data) throws -> [Entry.Info]
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Protocols/ContainerEntry.html b/Protocols/ContainerEntry.html new file mode 100644 index 00000000..5303c7e9 --- /dev/null +++ b/Protocols/ContainerEntry.html @@ -0,0 +1,384 @@ + + + + ContainerEntry Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ContainerEntry

+
+
+ +
public protocol ContainerEntry
+ +
+
+

A type that represents an entry from the container with its data and information.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + Info + +
    +
    +
    +
    +
    +
    +

    A type that provides information about an entry.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    associatedtype Info : ContainerEntryInfo
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + info + +
    +
    +
    +
    +
    +
    +

    Provides access to information about the entry.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var info: Info { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + data + +
    +
    +
    +
    +
    +
    +

    Entry’s data (nil if entry is a directory or data isn’t available).

    +
    +

    Note

    + It is assumed that the compression provided by the container is yet to be applied to data. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var data: Data? { get }
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Protocols/ContainerEntryInfo.html b/Protocols/ContainerEntryInfo.html new file mode 100644 index 00000000..4f2ecce2 --- /dev/null +++ b/Protocols/ContainerEntryInfo.html @@ -0,0 +1,499 @@ + + + + ContainerEntryInfo Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ContainerEntryInfo

+
+
+ +
public protocol ContainerEntryInfo
+ +
+
+

A type that provides access to information about an entry from the container.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    +

    Entry’s name.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var name: String { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + type + +
    +
    +
    +
    +
    +
    +

    Entry’s type.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var type: ContainerEntryType { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + size + +
    +
    +
    +
    +
    +
    +

    Entry’s data size (can be nil if either data or size aren’t available).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var size: Int? { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + accessTime + +
    +
    +
    +
    +
    +
    +

    Entry’s last access time (nil, if not available).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var accessTime: Date? { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + creationTime + +
    +
    +
    +
    +
    +
    +

    Entry’s creation time (nil, if not available).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var creationTime: Date? { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + modificationTime + +
    +
    +
    +
    +
    +
    +

    Entry’s last modification time (nil, if not available).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var modificationTime: Date? { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + permissions + +
    +
    +
    +
    +
    +
    +

    Entry’s permissions in POSIX format (nil, if not available).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var permissions: Permissions? { get }
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Protocols/DecompressionAlgorithm.html b/Protocols/DecompressionAlgorithm.html new file mode 100644 index 00000000..bb4fc4ae --- /dev/null +++ b/Protocols/DecompressionAlgorithm.html @@ -0,0 +1,319 @@ + + + + DecompressionAlgorithm Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

DecompressionAlgorithm

+
+
+ +
public protocol DecompressionAlgorithm
+ +
+
+

A type that provides an implementation of a particular decompression algorithm.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + decompress(data:) + +
    +
    +
    +
    +
    +
    +

    Decompress data compressed with particular algorithm.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static func decompress(data: Data) throws -> Data
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Protocols/ZipExtraField.html b/Protocols/ZipExtraField.html new file mode 100644 index 00000000..7a60d064 --- /dev/null +++ b/Protocols/ZipExtraField.html @@ -0,0 +1,463 @@ + + + + ZipExtraField Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ZipExtraField

+
+
+ +
public protocol ZipExtraField
+ +
+
+

A type that represents an extra field from a ZIP container.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + id + +
    +
    +
    +
    +
    +
    +

    ID of extra field. Must be equal to the key of extra field in ZipContainer.customExtraFields dictionary and +instance id property

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static var id: UInt16 { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + location + +
    +
    +
    +
    +
    +
    +

    Location of extra field. Must be equal to the value of location argument of init?(_:_:location:).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var location: ZipExtraFieldLocation { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + size + +
    +
    +
    +
    +
    +
    +

    Size of extra field’s data. Must be equal to the value of the second argument of init?(_:_:location:).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var size: Int { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + init(_:_:location:) + +
    +
    +
    +
    +
    +
    +

    Creates an extra field instance reading size amount of data from byteReader.

    + +

    It is guaranteed that the offset of byteReader is equal to the position right after extra field header ID and +length of extra field data. It is also guaranteed that header ID matches conforming type’s static id property.

    + +

    Following conditions are checked after execution of this initializer. Failure to satisfy them in conforming type +will result in runtime error.

    +
    +

    Postcondition

    + location property of a created instance must be equal to the location argument. + +
    +

    Postcondition

    + size property of a created instance must be equal to the second argument. + +
    +

    Postcondition

    + exactly size amount of bytes must be read by initializer from byteReader. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    init?(_ byteReader: LittleEndianByteReader, _ size: Int, location: ZipExtraFieldLocation)
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + id + + + Extension method + +
    +
    +
    +
    +
    +
    +

    ID of extra field. Must be equal to the key of extra field in ZipContainer.customExtraFields dictionary and +static id property

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var id: UInt16 { get }
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/DosAttributes.html b/Structs/DosAttributes.html new file mode 100644 index 00000000..61635df8 --- /dev/null +++ b/Structs/DosAttributes.html @@ -0,0 +1,529 @@ + + + + DosAttributes Structure Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

DosAttributes

+
+
+ +
public struct DosAttributes : OptionSet
+ +
+
+

Represents file attributes in DOS format.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + rawValue + +
    +
    +
    +
    +
    +
    +

    Raw bit flags value.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let rawValue: UInt32
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + init(rawValue:) + +
    +
    +
    +
    +
    +
    +

    Initializes attributes with bit flags.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(rawValue: UInt32)
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + archive + +
    +
    +
    +
    +
    +
    +

    File is archive or archived.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let archive: DosAttributes
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + directory + +
    +
    +
    +
    +
    +
    +

    File is a directory.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let directory: DosAttributes
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + volume + +
    +
    +
    +
    +
    +
    +

    File is a volume.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let volume: DosAttributes
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + system + +
    +
    +
    +
    +
    +
    +

    File is a system file.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let system: DosAttributes
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + hidden + +
    +
    +
    +
    +
    +
    +

    File is hidden.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let hidden: DosAttributes
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + readOnly + +
    +
    +
    +
    +
    +
    +

    File is read-only.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let readOnly: DosAttributes
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/GzipHeader.html b/Structs/GzipHeader.html new file mode 100644 index 00000000..ee792706 --- /dev/null +++ b/Structs/GzipHeader.html @@ -0,0 +1,592 @@ + + + + GzipHeader Structure Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

GzipHeader

+
+
+ +
public struct GzipHeader
+ +
+
+

Represents the header of a GZip archive.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + compressionMethod + +
    +
    +
    +
    +
    +
    +

    Compression method of archive. Always .deflate for GZip archives.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var compressionMethod: CompressionMethod
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + modificationTime + +
    +
    +
    +
    +
    +
    +

    The most recent modification time of the original file. If corresponding archive’s field is set to 0, which means +that no time was specified, then this property is nil.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var modificationTime: Date?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + osType + +
    +
    +
    +
    +
    +
    +

    Type of file system on which archivation took place.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var osType: FileSystemType
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + fileName + +
    +
    +
    +
    +
    +
    +

    Name of the original file. If archive doesn’t contain file’s name, then nil.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var fileName: String?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + comment + +
    +
    +
    +
    +
    +
    +

    Comment stored in archive. If archive doesn’t contain any comment, then nil.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var comment: String?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + isTextFile + +
    +
    +
    +
    +
    +
    +

    True, if file is likely to be text file or ASCII-file.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isTextFile: Bool
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + extraFields + +
    +
    +
    +
    +
    +
    +

    Extra fields present in the header.

    +
    +

    Note

    + This feature of the GZip format is extremely rarely used, so in vast majority of cases this property +contains an empty array. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var extraFields: [ExtraField]
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + init(archive:) + +
    +
    +
    +
    +
    +
    +

    Initializes the structure with the values from the first ‘member’ of GZip archive.

    +
    +

    Throws

    +

    GzipError. It may indicate that either archive is damaged or +it might not be archived with GZip at all.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(archive data: Data) throws
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + archive + + +
    +

    Data archived with GZip.

    +
    +
    +
    + +
    +
    +
  • +
  • +
    + + + + ExtraField + +
    +
    +
    +
    +
    +
    +

    Represents an extra field in the header of a GZip archive.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ExtraField
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/GzipHeader/ExtraField.html b/Structs/GzipHeader/ExtraField.html new file mode 100644 index 00000000..7f63895f --- /dev/null +++ b/Structs/GzipHeader/ExtraField.html @@ -0,0 +1,411 @@ + + + + ExtraField Structure Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ExtraField

+
+
+ +
public struct ExtraField
+ +
+
+

Represents an extra field in the header of a GZip archive.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + si1 + +
    +
    +
    +
    +
    +
    +

    First byte of the extra field (subfield) ID.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let si1: UInt8
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + si2 + +
    +
    +
    +
    +
    +
    +

    Second byte of the extra field (subfield) ID.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let si2: UInt8
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + bytes + +
    +
    +
    +
    +
    +
    +

    Binary content of the extra field.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var bytes: [UInt8]
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + init(_:_:_:) + +
    +
    +
    +
    +
    +
    +

    Initializes an extra field with the specified extra field (subfield) ID bytes and its binary content.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(_ si1: UInt8, _ si2: UInt8, _ bytes: [UInt8])
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/LZMAProperties.html b/Structs/LZMAProperties.html new file mode 100644 index 00000000..c5d9cf74 --- /dev/null +++ b/Structs/LZMAProperties.html @@ -0,0 +1,480 @@ + + + + LZMAProperties Structure Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LZMAProperties

+
+
+ +
public struct LZMAProperties
+ +
+
+

Properties of LZMA. This API is intended to be used by advanced users.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + lc + +
    +
    +
    +
    +
    +
    +

    Number of bits used for the literal encoding context. Default value is 3.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var lc: Int
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + lp + +
    +
    +
    +
    +
    +
    +

    Number of bits to include in “literal position state”. Default value is 0.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var lp: Int
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + pb + +
    +
    +
    +
    +
    +
    +

    Number of bits to include in “position state”. Default value is 2.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var pb: Int
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + dictionarySize + +
    +
    +
    +
    +
    +
    +

    Size of the dictionary. Default value is 1 << 24.

    +
    +

    Note

    + Dictionary size cannot be less than 4096. In case of attempt to set it to the value less than 4096 it will +be automatically set to 4096 instead. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var dictionarySize: Int { get set }
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Initializes LZMA properties with values of lc, lp, pb, and dictionary size.

    +
    +

    Note

    + It is not tested if values of lc, lp, and pb are valid. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(lc: Int, lp: Int, pb: Int, dictionarySize: Int)
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + init() + +
    +
    +
    +
    +
    +
    +

    Initializes LZMA properties with default values of lc, lp, pb, and dictionary size.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init()
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/Permissions.html b/Structs/Permissions.html new file mode 100644 index 00000000..4e4eee05 --- /dev/null +++ b/Structs/Permissions.html @@ -0,0 +1,709 @@ + + + + Permissions Structure Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Permissions

+
+
+ +
public struct Permissions : OptionSet
+ +
+
+

Represents file access permissions in UNIX format.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + rawValue + +
    +
    +
    +
    +
    +
    +

    Raw bit flags value (in decimal).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let rawValue: UInt32
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + init(rawValue:) + +
    +
    +
    +
    +
    +
    +

    Initializes permissions with bit flags in decimal.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(rawValue: UInt32)
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + setuid + +
    +
    +
    +
    +
    +
    +

    Set UID.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let setuid: Permissions
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + setgid + +
    +
    +
    +
    +
    +
    +

    Set GID.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let setgid: Permissions
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + sticky + +
    +
    +
    +
    +
    +
    +

    Sticky bit.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let sticky: Permissions
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + readOwner + +
    +
    +
    +
    +
    +
    +

    Owner can read.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let readOwner: Permissions
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + writeOwner + +
    +
    +
    +
    +
    +
    +

    Owner can write.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let writeOwner: Permissions
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + executeOwner + +
    +
    +
    +
    +
    +
    +

    Owner can execute.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let executeOwner: Permissions
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + readGroup + +
    +
    +
    +
    +
    +
    +

    Group can read.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let readGroup: Permissions
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + writeGroup + +
    +
    +
    +
    +
    +
    +

    Group can write.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let writeGroup: Permissions
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + executeGroup + +
    +
    +
    +
    +
    +
    +

    Group can execute.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let executeGroup: Permissions
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + readOther + +
    +
    +
    +
    +
    +
    +

    Others can read.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let readOther: Permissions
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + writeOther + +
    +
    +
    +
    +
    +
    +

    Others can write.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let writeOther: Permissions
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + executeOther + +
    +
    +
    +
    +
    +
    +

    Others can execute.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let executeOther: Permissions
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/SevenZipEntry.html b/Structs/SevenZipEntry.html new file mode 100644 index 00000000..d35f5f9a --- /dev/null +++ b/Structs/SevenZipEntry.html @@ -0,0 +1,347 @@ + + + + SevenZipEntry Structure Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

SevenZipEntry

+
+
+ +
public struct SevenZipEntry : ContainerEntry
+ +
+
+

Represents an entry from the 7-Zip container.

+ + +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/Structs/SevenZipEntryInfo.html b/Structs/SevenZipEntryInfo.html new file mode 100644 index 00000000..7d729356 --- /dev/null +++ b/Structs/SevenZipEntryInfo.html @@ -0,0 +1,696 @@ + + + + SevenZipEntryInfo Structure Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

SevenZipEntryInfo

+
+
+ +
public struct SevenZipEntryInfo : ContainerEntryInfo
+ +
+
+

Provides access to information about an entry from the 7-Zip container.

+ + +
+
+ +
+
+
+
+ + +
+ +

ContainerEntryInfo +

+
+
+ +
+
+
+ + +
+ +

7-Zip specific +

+
+
+
    +
  • +
    + + + + winAttributes + +
    +
    +
    +
    +
    +
    +

    Entry’s “win attributes”. 7-Zip internal property. +May be useful when origin file system’s attributes weren’t POSIX compatible.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let winAttributes: UInt32?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + dosAttributes + +
    +
    +
    +
    +
    +
    +

    Entry’s attributes in DOS format.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let dosAttributes: DosAttributes?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + hasStream + +
    +
    +
    +
    +
    +
    +

    True, if entry has a stream (data) inside the container. 7-Zip internal propety.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let hasStream: Bool
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + isEmpty + +
    +
    +
    +
    +
    +
    +

    True, if entry is an empty file. 7-Zip internal property.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let isEmpty: Bool
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + isAnti + +
    +
    +
    +
    +
    +
    +

    True, if entry is an anti-file. Used in differential backups to indicate that file should be deleted. +7-Zip internal property.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let isAnti: Bool
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + crc + +
    +
    +
    +
    +
    +
    +

    CRC32 of entry’s data.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let crc: UInt32?
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/TarEntry.html b/Structs/TarEntry.html new file mode 100644 index 00000000..edb7efea --- /dev/null +++ b/Structs/TarEntry.html @@ -0,0 +1,416 @@ + + + + TarEntry Structure Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

TarEntry

+
+
+ +
public struct TarEntry : ContainerEntry
+ +
+
+

Represents an entry from the TAR container.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + info + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var info: TarEntryInfo
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + data + +
    +
    +
    +
    +
    +
    +

    Entry’s data (nil if entry is a directory or data isn’t available).

    +
    +

    Note

    + Accessing setter of this property causes info.size to be updated as well so it remains equal to +data.count. If data is set to be nil then info.size is set to zero. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var data: Data? { get set }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + init(info:data:) + +
    +
    +
    +
    +
    +
    +

    Initializes the entry with its info and data. The stored info.size will also be updated to be equal to +data.count. If data is nil then info.size will be set to zero.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(info: TarEntryInfo, data: Data?)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + info + + +
    +

    Information about entry.

    +
    +
    + + data + + +
    +

    Entry’s data; nil if entry is a directory or data isn’t available.

    +
    +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/TarEntryInfo.html b/Structs/TarEntryInfo.html new file mode 100644 index 00000000..4b1afacf --- /dev/null +++ b/Structs/TarEntryInfo.html @@ -0,0 +1,1054 @@ + + + + TarEntryInfo Structure Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

TarEntryInfo

+
+
+ +
public struct TarEntryInfo : ContainerEntryInfo
+ +
+
+

Provides access to information about an entry from the TAR container.

+ + +
+
+ +
+
+
+
+ + +
+ +

ContainerEntryInfo +

+
+
+
    +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    +

    Entry’s name.

    + +

    Depending on the particular format of the container, different container’s structures are used +to set this property, in the following preference order:

    + +
      +
    1. Local PAX extended header “path” property.
    2. +
    3. Global PAX extended header “path” property.
    4. +
    5. GNU format type “L” (LongName) entry.
    6. +
    7. Default TAR header.
    8. +
    +
    +

    Note

    + When a new TAR container is created, if name cannot be encoded with ASCII or its ASCII byte-representation +is longer than 100 bytes then a PAX extended header will be created to represent this value correctly, unless other +format is forced. + +
    +

    Note

    + When creating new TAR container, name is always encoded with UTF-8 in the basic TAR header. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var name: String
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + size + +
    +
    +
    +
    +
    +
    +

    Entry’s data size.

    +
    +

    Note

    + This property cannot be directly modified. Instead it is updated automatically to be equal to its parent’s +entry.data.count. + +
    +

    Note

    + When a new TAR container is created, if size is bigger than 8589934591 then a PAX extended header will be +created to represent this value correctly, unless other format is forced. In addition, base-256 encoding will be +used to encode this value in the basic TAR header. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public internal(set) var size: Int? { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + type + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let type: ContainerEntryType
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + accessTime + +
    +
    +
    +
    +
    +
    +

    Entry’s last access time (only available for PAX format; nil otherwise).

    +
    +

    Note

    + When a new TAR container is created, if accessTime is not nil then a PAX extended header will be created +to store this property, unless other format is forced. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var accessTime: Date?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + creationTime + +
    +
    +
    +
    +
    +
    +

    Entry’s creation time (only available for PAX format; nil otherwise).

    +
    +

    Note

    + When a new TAR container is created, if creationTime is not nil then a PAX extended header will be +created to store this property, unless other format is forced. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var creationTime: Date?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + modificationTime + +
    +
    +
    +
    +
    +
    +

    Entry’s last modification time.

    +
    +

    Note

    + When a new TAR container is created, if modificationTime is bigger than 8589934591 then a PAX extended +header will be created to represent this value correctly, unless other format is forced. In addition, base-256 +encoding will be used to encode this value in the basic TAR header. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var modificationTime: Date?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + permissions + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var permissions: Permissions?
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ + +
+ +

TAR specific +

+
+
+
    +
  • +
    + + + + compressionMethod + +
    +
    +
    +
    +
    +
    +

    Entry’s compression method. Always .copy for the entries of TAR containers.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let compressionMethod: CompressionMethod
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + ownerID + +
    +
    +
    +
    +
    +
    +

    ID of entry’s owner.

    +
    +

    Note

    + When a new TAR container is created, if ownerID is bigger than 2097151 then a PAX extended header will be +created to represent this value correctly, unless other format is forced. In addition, base-256 encoding will be +used to encode this value in the basic TAR header. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var ownerID: Int?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + groupID + +
    +
    +
    +
    +
    +
    +

    ID of the group of entry’s owner.

    +
    +

    Note

    + When a new TAR container is created, if groupID is bigger than 2097151 then a PAX extended header will be +created to represent this value correctly, unless other format is forced. In addition, base-256 encoding will be +used to encode this value in the basic TAR header. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var groupID: Int?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + ownerUserName + +
    +
    +
    +
    +
    +
    +

    User name of entry’s owner.

    +
    +

    Note

    + When a new TAR container is created, if ownerUserName cannot be encoded with ASCII or its ASCII +byte-representation is longer than 32 bytes then a PAX extended header will be created to represent this value +correctly, unless other format is forced. + +
    +

    Note

    + When creating new TAR container, ownerUserName is always encoded with UTF-8 in the ustar header. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var ownerUserName: String?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + ownerGroupName + +
    +
    +
    +
    +
    +
    +

    Name of the group of entry’s owner.

    +
    +

    Note

    + When new TAR container is created, if ownerGroupName cannot be encoded with ASCII or its ASCII +byte-representation is longer than 32 bytes then a PAX extended header will be created to represent this value +correctly, unless other format is forced. + +
    +

    Note

    + When creating new TAR container, ownerGroupName is always encoded with UTF-8 in the ustar header. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var ownerGroupName: String?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + deviceMajorNumber + +
    +
    +
    +
    +
    +
    +

    Device major number (used when entry is either block or character special file).

    +
    +

    Note

    + When new TAR container is created, if deviceMajorNumber is bigger than 2097151 then base-256 encoding +will be used to encode this value in ustar header. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var deviceMajorNumber: Int?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + deviceMinorNumber + +
    +
    +
    +
    +
    +
    +

    Device minor number (used when entry is either block or character special file).

    +
    +

    Note

    + When new TAR container is created, if deviceMinorNumber is bigger than 2097151 then base-256 encoding +will be used to encode this value in ustar header. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var deviceMinorNumber: Int?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + charset + +
    +
    +
    +
    +
    +
    +

    Name of the character set used to encode entry’s data (only available for PAX format; nil otherwise).

    +
    +

    Note

    + When new TAR container is created, if charset is not nil then a PAX extended header will be created to +store this property, unless other format is forced. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var charset: String?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + comment + +
    +
    +
    +
    +
    +
    +

    Entry’s comment (only available for PAX format; nil otherwise).

    +
    +

    Note

    + When new TAR container is created, if comment is not nil then a PAX extended header will be created to +store this property, unless other format is forced. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var comment: String?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + linkName + +
    +
    +
    +
    +
    +
    +

    Path to a linked file for symbolic link entry.

    + +

    Depending on the particular format of the container, different container’s structures are used +to set this property, in the following preference order:

    + +
      +
    1. Local PAX extended header “linkpath” property.
    2. +
    3. Global PAX extended header “linkpath” property.
    4. +
    5. GNU format type “K” (LongLink) entry.
    6. +
    7. Default TAR header.
    8. +
    +
    +

    Note

    + When new TAR container is created, if linkName cannot be encoded with ASCII or its ASCII +byte-representation is longer than 100 bytes then a PAX extended header will be created to represent this value +correctly, unless other format is forced. + +
    +

    Note

    + When creating new TAR container, linkName is always encoded with UTF-8 in basic TAR header. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var linkName: String
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    All custom (unknown) records from global and local PAX extended headers. nil, if there were no headers.

    +
    +

    Note

    + When new TAR container is created, if unknownExtendedHeaderRecords is not nil then a local PAX +extended header will be created to store this property, unless other format is forced. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var unknownExtendedHeaderRecords: [String : String]?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + init(name:type:) + +
    +
    +
    +
    +
    +
    +

    Initializes the entry’s info with its name and type.

    +
    +

    Note

    +

    Entry’s type cannot be modified after initialization.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(name: String, type: ContainerEntryType)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + name + + +
    +

    Entry’s name.

    +
    +
    + + type + + +
    +

    Entry’s type.

    +
    +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/TarReader.html b/Structs/TarReader.html new file mode 100644 index 00000000..16361de4 --- /dev/null +++ b/Structs/TarReader.html @@ -0,0 +1,437 @@ + + + + TarReader Structure Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

TarReader

+
+
+ +
public struct TarReader
+ +
+
+

A type that allows to iteratively read TAR entries from a container provided by a FileHandle.

+ +

The TarReader may be helpful in reducing the peak memory usage on certain platforms. However, to achieve this either +the TarReader.process(_:) function should be used or both the call to TarReader.read() and the processing of the +returned entry should be wrapped inside the autoreleasepool. Since the autoreleasepool is available only on Darwin +platforms, the memory reducing effect may be not as significant on non-Darwin platforms (such as Linux or Windows).

+ +

The following code demonstrates an example usage of the TarReader:

+
   let handle: FileHandle = ...
+   let reader = TarReader(fileHandle: handle)
+   try reader.process { ... }
+   ...
+   try handle.close()
+
+ +

Note that closing the FileHandle remains the responsibility of the caller.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + init(fileHandle:) + +
    +
    +
    +
    +
    +
    +

    Creates a new instance for reading TAR entries from the provided fileHandle.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(fileHandle: FileHandle)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + fileHandle + + +
    +

    A handle from which the entries will be read. Note that the TarReader does not close the +fileHandle and this remains the responsibility of the caller.

    +
    +
    +
    + +
    +
    +
  • +
  • +
    + + + + process(_:) + +
    +
    +
    +
    +
    +
    +

    Processes the next TAR entry by reading it from the container and calling the provided closure on the result. If +the argument supplied to the closure is nil this indicates that the end of the input was reached.

    + +

    On Darwin platforms both the reading and the call to the closure are performed inside the autoreleasepool which +allows to reduce the peak memory usage.

    +
    +

    Throws

    + DataError.truncated if the input is truncated. TarError is thrown in case of malformed input. Errors +thrown by FileHandle operations are also propagated. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public mutating func process<T>(_ transform: (TarEntry?) throws -> T) throws -> T
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + read() + +
    +
    +
    +
    +
    +
    +

    Reads the next TAR entry from the container.

    + +

    On Darwin platforms it is recommended to wrap both the call to this function and the follow-up processing inside +the autoreleasepool in order to reduce the peak memory usage.

    +
    +

    Throws

    +

    DataError.truncated if the input is truncated. TarError is thrown in case of malformed input. Errors +thrown by FileHandle operations are also propagated.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public mutating func read() throws -> TarEntry?
    + +
    +
    +
    +

    Return Value

    +

    The next entry from the container or nil if the end of the input has been reached.

    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/TarWriter.html b/Structs/TarWriter.html new file mode 100644 index 00000000..21c6042c --- /dev/null +++ b/Structs/TarWriter.html @@ -0,0 +1,453 @@ + + + + TarWriter Structure Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

TarWriter

+
+
+ +
public struct TarWriter
+ +
+
+

A type that allows to iteratively create TAR containers with the output being written into a FileHandle.

+ +

The TarWriter may be helpful in reducing the peak memory usage on certain platforms. However, to achieve this both +the creation of TAR entries and the calls to TarWriter should be wrapped inside the autoreleasepool. Since the +autoreleasepool is available only on Darwin platforms, the memory reducing effect may be not as significant on +non-Darwin platforms (such as Linux or Windows).

+ +

The following code demonstrates an example usage of the TarWriter:

+
   let handle: FileHandle = ...
+   let writer = TarWriter(fileHandle: handle)
+   try autoreleasepool {
+       let entry: TarEntry = ...
+       try writer.append(entry)
+   }
+   try writer.finalize()
+   try handle.close()
+
+ +

Note that TarWriter.finalize() must be called after finishing appending entries to the container. In addition, +closing the FileHandle remains the responsibility of the caller.

+ + +
+
+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Creates a new instance for writing TAR entries using the specified format into the provided fileHandle.

    + +

    The TarWriter will be forced to use the provided format, meaning that certain properties of the entries may +be missing from the output data if the chosen format does not support corresponding features. The default .pax +format supports the largest set of features. Other (non-PAX) formats should only be used if you have a specific +need for them and you understand limitations of those formats.

    +
    +

    Important

    +

    TarWriter.finalize() must be called after all entries have been appended.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(fileHandle: FileHandle, force format: TarContainer.Format = .pax)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + fileHandle + + +
    +

    A handle into which the output will be written. Note that the TarWriter does not +close the fileHandle and this remains the responsibility of the caller.

    +
    +
    + + force + + +
    +

    Force the usage of the specified format.

    +
    +
    +
    + +
    +
    +
  • +
  • +
    + + + + append(_:) + +
    +
    +
    +
    +
    +
    +

    Adds a new TAR entry at the end of the TAR container.

    + +

    On Darwin platforms it is recommended to wrap both the initialization of a TarEntry and the call to this +function inside the autoreleasepool in order to reduce the peak memory usage.

    +
    +

    Throws

    + Errors from the FileHandle operations. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public mutating func append(_ entry: TarEntry) throws
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + finalize() + +
    +
    +
    +
    +
    +
    +

    Finalizes the TAR container by adding an EOF marker.

    +
    +

    Throws

    + Errors from the FileHandle operations. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func finalize() throws
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/ZipEntry.html b/Structs/ZipEntry.html new file mode 100644 index 00000000..1399bef4 --- /dev/null +++ b/Structs/ZipEntry.html @@ -0,0 +1,347 @@ + + + + ZipEntry Structure Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ZipEntry

+
+
+ +
public struct ZipEntry : ContainerEntry
+ +
+
+

Represents an entry from the ZIP container.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + info + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let info: ZipEntryInfo
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + data + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let data: Data?
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/ZipEntryInfo.html b/Structs/ZipEntryInfo.html new file mode 100644 index 00000000..155891aa --- /dev/null +++ b/Structs/ZipEntryInfo.html @@ -0,0 +1,861 @@ + + + + ZipEntryInfo Structure Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ZipEntryInfo

+
+
+ +
public struct ZipEntryInfo : ContainerEntryInfo
+ +
+
+

Provides access to information about an entry from the ZIP container.

+ + +
+
+ +
+
+
+
+ + +
+ +

ContainerEntryInfo +

+
+
+
    +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let name: String
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + size + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let size: Int?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + type + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let type: ContainerEntryType
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + accessTime + +
    +
    +
    +
    +
    +
    +

    Entry’s last access time (nil, if not available).

    + +

    Set from different sources in the following preference order:

    + +
      +
    1. Extended timestamp extra field (most common on UNIX-like systems).
    2. +
    3. NTFS extra field.
    4. +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let accessTime: Date?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + creationTime + +
    +
    +
    +
    +
    +
    +

    Entry’s creation time (nil, if not available).

    + +

    Set from different sources in the following preference order:

    + +
      +
    1. Extended timestamp extra field (most common on UNIX-like systems).
    2. +
    3. NTFS extra field.
    4. +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let creationTime: Date?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + modificationTime + +
    +
    +
    +
    +
    +
    +

    Entry’s last modification time.

    + +

    Set from different sources in the following preference order:

    + +
      +
    1. Extended timestamp extra field (most common on UNIX-like systems).
    2. +
    3. NTFS extra field.
    4. +
    5. ZIP container’s own storage (in Central Directory entry).
    6. +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let modificationTime: Date?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + permissions + +
    +
    +
    +
    +
    +
    +

    Entry’s permissions in POSIX format. +May have meaningless value if origin file system’s attributes weren’t POSIX compatible.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let permissions: Permissions?
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ + +
+ +

ZIP specific +

+
+
+
    +
  • +
    + + + + comment + +
    +
    +
    +
    +
    +
    +

    Entry’s comment.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let comment: String
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Entry’s external file attributes. ZIP internal property. +May be useful when origin file system’s attributes weren’t POSIX compatible.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let externalFileAttributes: UInt32
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + dosAttributes + +
    +
    +
    +
    +
    +
    +

    Entry’s attributes in DOS format.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let dosAttributes: DosAttributes?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + isTextFile + +
    +
    +
    +
    +
    +
    +

    True, if entry is likely to be text or ASCII file.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let isTextFile: Bool
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + fileSystemType + +
    +
    +
    +
    +
    +
    +

    File system type of container’s origin.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let fileSystemType: FileSystemType
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + compressionMethod + +
    +
    +
    +
    +
    +
    +

    Entry’s compression method.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let compressionMethod: CompressionMethod
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + ownerID + +
    +
    +
    +
    +
    +
    +

    ID of entry’s owner.

    + +

    Set from different sources in the following preference order, if possible:

    + +
      +
    1. Info-ZIP New Unix extra field.
    2. +
    3. Info-ZIP Unix extra field.
    4. +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let ownerID: Int?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + groupID + +
    +
    +
    +
    +
    +
    +

    ID of the group of entry’s owner.

    + +

    Set from different sources in the following preference order, if possible:

    + +
      +
    1. Info-ZIP New Unix extra field.
    2. +
    3. Info-ZIP Unix extra field.
    4. +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let groupID: Int?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + customExtraFields + +
    +
    +
    +
    +
    +
    +

    Entry’s custom extra fields from both Central Directory and Local Header.

    +
    +

    Note

    + No particular order of extra fields is guaranteed. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let customExtraFields: [ZipExtraField]
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + crc + +
    +
    +
    +
    +
    +
    +

    CRC32 of entry’s data.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let crc: UInt32
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/ZlibHeader.html b/Structs/ZlibHeader.html new file mode 100644 index 00000000..e3bef053 --- /dev/null +++ b/Structs/ZlibHeader.html @@ -0,0 +1,466 @@ + + + + ZlibHeader Structure Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ZlibHeader

+
+
+ +
public struct ZlibHeader
+ +
+
+

Represents the header of a Zlib archive.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + CompressionLevel + +
    +
    +
    +
    +
    +
    +

    Levels of compression which can be used to create Zlib archive.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CompressionLevel : Int
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + compressionMethod + +
    +
    +
    +
    +
    +
    +

    Compression method of archive. Always .deflate for Zlib archives.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let compressionMethod: CompressionMethod
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + compressionLevel + +
    +
    +
    +
    +
    +
    +

    Level of compression used in archive.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let compressionLevel: CompressionLevel
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + windowSize + +
    +
    +
    +
    +
    +
    +

    Size of ‘window’: moving interval of data which was used to make archive.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let windowSize: Int
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + init(archive:) + +
    +
    +
    +
    +
    +
    +

    Initializes the structure with the values from Zlib archive.

    + +

    If data passed is not actually a Zlib archive, ZlibError will be thrown.

    +
    +

    Throws

    +

    ZlibError. It may indicate that either archive is damaged or it might not be archived with Zlib at all.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(archive data: Data) throws
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + archive + + +
    +

    Data archived with zlib.

    +
    +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/Structs/ZlibHeader/CompressionLevel.html b/Structs/ZlibHeader/CompressionLevel.html new file mode 100644 index 00000000..04d62d22 --- /dev/null +++ b/Structs/ZlibHeader/CompressionLevel.html @@ -0,0 +1,411 @@ + + + + CompressionLevel Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

CompressionLevel

+
+
+ +
public enum CompressionLevel : Int
+ +
+
+

Levels of compression which can be used to create Zlib archive.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + fastestAlgorithm + +
    +
    +
    +
    +
    +
    +

    Fastest algorithm.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fastestAlgorithm = 0
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + fastAlgorithm + +
    +
    +
    +
    +
    +
    +

    Fast algorithm.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fastAlgorithm = 1
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + defaultAlgorithm + +
    +
    +
    +
    +
    +
    +

    Default algorithm.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case defaultAlgorithm = 2
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + slowAlgorithm + +
    +
    +
    +
    +
    +
    +

    Slowest algorithm but with maximum compression.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case slowAlgorithm = 3
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/TAR.html b/TAR.html new file mode 100644 index 00000000..de339a5e --- /dev/null +++ b/TAR.html @@ -0,0 +1,465 @@ + + + + TAR Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

TAR

+ +
+
+ +
+
+
+
    +
  • +
    + + + + TarContainer + +
    +
    +
    +
    +
    +
    +

    Provides functions for work with TAR containers.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class TarContainer : Container
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + TarReader + +
    +
    +
    +
    +
    +
    +

    A type that allows to iteratively read TAR entries from a container provided by a FileHandle.

    + +

    The TarReader may be helpful in reducing the peak memory usage on certain platforms. However, to achieve this either +the TarReader.process(_:) function should be used or both the call to TarReader.read() and the processing of the +returned entry should be wrapped inside the autoreleasepool. Since the autoreleasepool is available only on Darwin +platforms, the memory reducing effect may be not as significant on non-Darwin platforms (such as Linux or Windows).

    + +

    The following code demonstrates an example usage of the TarReader:

    +
       let handle: FileHandle = ...
    +   let reader = TarReader(fileHandle: handle)
    +   try reader.process { ... }
    +   ...
    +   try handle.close()
    +
    + +

    Note that closing the FileHandle remains the responsibility of the caller.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct TarReader
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + TarWriter + +
    +
    +
    +
    +
    +
    +

    A type that allows to iteratively create TAR containers with the output being written into a FileHandle.

    + +

    The TarWriter may be helpful in reducing the peak memory usage on certain platforms. However, to achieve this both +the creation of TAR entries and the calls to TarWriter should be wrapped inside the autoreleasepool. Since the +autoreleasepool is available only on Darwin platforms, the memory reducing effect may be not as significant on +non-Darwin platforms (such as Linux or Windows).

    + +

    The following code demonstrates an example usage of the TarWriter:

    +
       let handle: FileHandle = ...
    +   let writer = TarWriter(fileHandle: handle)
    +   try autoreleasepool {
    +       let entry: TarEntry = ...
    +       try writer.append(entry)
    +   }
    +   try writer.finalize()
    +   try handle.close()
    +
    + +

    Note that TarWriter.finalize() must be called after finishing appending entries to the container. In addition, +closing the FileHandle remains the responsibility of the caller.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct TarWriter
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + TarEntry + +
    +
    +
    +
    +
    +
    +

    Represents an entry from the TAR container.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct TarEntry : ContainerEntry
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + TarEntryInfo + +
    +
    +
    +
    +
    +
    +

    Provides access to information about an entry from the TAR container.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct TarEntryInfo : ContainerEntryInfo
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/ZIP.html b/ZIP.html new file mode 100644 index 00000000..86ba48bc --- /dev/null +++ b/ZIP.html @@ -0,0 +1,431 @@ + + + + ZIP Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ZIP

+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/badge.svg b/badge.svg new file mode 100644 index 00000000..a096feca --- /dev/null +++ b/badge.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + documentation + + + documentation + + + 100% + + + 100% + + + diff --git a/css/highlight.css b/css/highlight.css new file mode 100644 index 00000000..c170357c --- /dev/null +++ b/css/highlight.css @@ -0,0 +1,202 @@ +/*! Jazzy - https://github.com/realm/jazzy + * Copyright Realm Inc. + * SPDX-License-Identifier: MIT + */ +/* Credit to https://gist.github.com/wataru420/2048287 */ +.highlight .c { + color: #999988; + font-style: italic; } + +.highlight .err { + color: #a61717; + background-color: #e3d2d2; } + +.highlight .k { + color: #000000; + font-weight: bold; } + +.highlight .o { + color: #000000; + font-weight: bold; } + +.highlight .cm { + color: #999988; + font-style: italic; } + +.highlight .cp { + color: #999999; + font-weight: bold; } + +.highlight .c1 { + color: #999988; + font-style: italic; } + +.highlight .cs { + color: #999999; + font-weight: bold; + font-style: italic; } + +.highlight .gd { + color: #000000; + background-color: #ffdddd; } + +.highlight .gd .x { + color: #000000; + background-color: #ffaaaa; } + +.highlight .ge { + color: #000000; + font-style: italic; } + +.highlight .gr { + color: #aa0000; } + +.highlight .gh { + color: #999999; } + +.highlight .gi { + color: #000000; + background-color: #ddffdd; } + +.highlight .gi .x { + color: #000000; + background-color: #aaffaa; } + +.highlight .go { + color: #888888; } + +.highlight .gp { + color: #555555; } + +.highlight .gs { + font-weight: bold; } + +.highlight .gu { + color: #aaaaaa; } + +.highlight .gt { + color: #aa0000; } + +.highlight .kc { + color: #000000; + font-weight: bold; } + +.highlight .kd { + color: #000000; + font-weight: bold; } + +.highlight .kp { + color: #000000; + font-weight: bold; } + +.highlight .kr { + color: #000000; + font-weight: bold; } + +.highlight .kt { + color: #445588; } + +.highlight .m { + color: #009999; } + +.highlight .s { + color: #d14; } + +.highlight .na { + color: #008080; } + +.highlight .nb { + color: #0086B3; } + +.highlight .nc { + color: #445588; + font-weight: bold; } + +.highlight .no { + color: #008080; } + +.highlight .ni { + color: #800080; } + +.highlight .ne { + color: #990000; + font-weight: bold; } + +.highlight .nf { + color: #990000; } + +.highlight .nn { + color: #555555; } + +.highlight .nt { + color: #000080; } + +.highlight .nv { + color: #008080; } + +.highlight .ow { + color: #000000; + font-weight: bold; } + +.highlight .w { + color: #bbbbbb; } + +.highlight .mf { + color: #009999; } + +.highlight .mh { + color: #009999; } + +.highlight .mi { + color: #009999; } + +.highlight .mo { + color: #009999; } + +.highlight .sb { + color: #d14; } + +.highlight .sc { + color: #d14; } + +.highlight .sd { + color: #d14; } + +.highlight .s2 { + color: #d14; } + +.highlight .se { + color: #d14; } + +.highlight .sh { + color: #d14; } + +.highlight .si { + color: #d14; } + +.highlight .sx { + color: #d14; } + +.highlight .sr { + color: #009926; } + +.highlight .s1 { + color: #d14; } + +.highlight .ss { + color: #990073; } + +.highlight .bp { + color: #999999; } + +.highlight .vc { + color: #008080; } + +.highlight .vg { + color: #008080; } + +.highlight .vi { + color: #008080; } + +.highlight .il { + color: #009999; } diff --git a/css/jazzy.css b/css/jazzy.css new file mode 100644 index 00000000..9d4b08b8 --- /dev/null +++ b/css/jazzy.css @@ -0,0 +1,405 @@ +/*! Jazzy - https://github.com/realm/jazzy + * Copyright Realm Inc. + * SPDX-License-Identifier: MIT + */ +*, *:before, *:after { + box-sizing: inherit; } + +body { + margin: 0; + background: #fff; + color: #333; + font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif; + letter-spacing: .2px; + -webkit-font-smoothing: antialiased; + box-sizing: border-box; } + +h1 { + font-size: 2rem; + font-weight: 700; + margin: 1.275em 0 0.6em; } + +h2 { + font-size: 1.75rem; + font-weight: 700; + margin: 1.275em 0 0.3em; } + +h3 { + font-size: 1.5rem; + font-weight: 700; + margin: 1em 0 0.3em; } + +h4 { + font-size: 1.25rem; + font-weight: 700; + margin: 1.275em 0 0.85em; } + +h5 { + font-size: 1rem; + font-weight: 700; + margin: 1.275em 0 0.85em; } + +h6 { + font-size: 1rem; + font-weight: 700; + margin: 1.275em 0 0.85em; + color: #777; } + +p { + margin: 0 0 1em; } + +ul, ol { + padding: 0 0 0 2em; + margin: 0 0 0.85em; } + +blockquote { + margin: 0 0 0.85em; + padding: 0 15px; + color: #858585; + border-left: 4px solid #e5e5e5; } + +img { + max-width: 100%; } + +a { + color: #4183c4; + text-decoration: none; } + a:hover, a:focus { + outline: 0; + text-decoration: underline; } + a.discouraged { + text-decoration: line-through; } + a.discouraged:hover, a.discouraged:focus { + text-decoration: underline line-through; } + +table { + background: #fff; + width: 100%; + border-collapse: collapse; + border-spacing: 0; + overflow: auto; + margin: 0 0 0.85em; } + +tr:nth-child(2n) { + background-color: #fbfbfb; } + +th, td { + padding: 6px 13px; + border: 1px solid #ddd; } + +hr { + height: 1px; + border: none; + background-color: #ddd; } + +pre { + margin: 0 0 1.275em; + padding: .85em 1em; + overflow: auto; + background: #f7f7f7; + font-size: .85em; + font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; } + +code { + font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; } + +.item-container p > code, .item-container li > code, .top-matter p > code, .top-matter li > code { + background: #f7f7f7; + padding: .2em; } + .item-container p > code:before, .item-container p > code:after, .item-container li > code:before, .item-container li > code:after, .top-matter p > code:before, .top-matter p > code:after, .top-matter li > code:before, .top-matter li > code:after { + letter-spacing: -.2em; + content: "\00a0"; } + +pre code { + padding: 0; + white-space: pre; } + +.content-wrapper { + display: flex; + flex-direction: column; } + @media (min-width: 768px) { + .content-wrapper { + flex-direction: row; } } +.header { + display: flex; + padding: 8px; + font-size: 0.875em; + background: #444; + color: #999; } + +.header-col { + margin: 0; + padding: 0 8px; } + +.header-col--primary { + flex: 1; } + +.header-link { + color: #fff; } + +.header-icon { + padding-right: 2px; + vertical-align: -3px; + height: 16px; } + +.breadcrumbs { + font-size: 0.875em; + padding: 8px 16px; + margin: 0; + background: #fbfbfb; + border-bottom: 1px solid #ddd; } + +.carat { + height: 10px; + margin: 0 5px; } + +.navigation { + order: 2; } + @media (min-width: 768px) { + .navigation { + order: 1; + width: 25%; + max-width: 300px; + padding-bottom: 64px; + overflow: hidden; + word-wrap: normal; + background: #fbfbfb; + border-right: 1px solid #ddd; } } +.nav-groups { + list-style-type: none; + padding-left: 0; } + +.nav-group-name { + border-bottom: 1px solid #ddd; + padding: 8px 0 8px 16px; } + +.nav-group-name-link { + color: #333; } + +.nav-group-tasks { + margin: 8px 0; + padding: 0 0 0 8px; } + +.nav-group-task { + font-size: 1em; + list-style-type: none; + white-space: nowrap; } + +.nav-group-task-link { + color: #808080; } + +.main-content { + order: 1; } + @media (min-width: 768px) { + .main-content { + order: 2; + flex: 1; + padding-bottom: 60px; } } +.section { + padding: 0 32px; + border-bottom: 1px solid #ddd; } + +.section-content { + max-width: 834px; + margin: 0 auto; + padding: 16px 0; } + +.section-name { + color: #666; + display: block; } + .section-name p { + margin-bottom: inherit; } + +.declaration .highlight { + overflow-x: initial; + padding: 8px 0; + margin: 0; + background-color: transparent; + border: none; } + +.task-group-section { + border-top: 1px solid #ddd; } + +.task-group { + padding-top: 0px; } + +.task-name-container a[name]:before { + content: ""; + display: block; } + +.section-name-container { + position: relative; } + .section-name-container .section-name-link { + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + margin-bottom: 0; } + .section-name-container .section-name { + position: relative; + pointer-events: none; + z-index: 1; } + .section-name-container .section-name a { + pointer-events: auto; } + +.item-container { + padding: 0; } + +.item { + padding-top: 8px; + width: 100%; + list-style-type: none; } + .item a[name]:before { + content: ""; + display: block; } + .item .token, .item .direct-link { + display: inline-block; + text-indent: -20px; + padding-left: 3px; + margin-left: 20px; + font-size: 1rem; } + +.declaration-note { + font-size: .85em; + color: #808080; + font-style: italic; } + +.pointer-container { + border-bottom: 1px solid #ddd; + left: -23px; + padding-bottom: 13px; + position: relative; + width: 110%; } + +.pointer { + left: 21px; + top: 7px; + display: block; + position: absolute; + width: 12px; + height: 12px; + border-left: 1px solid #ddd; + border-top: 1px solid #ddd; + background: #fff; + transform: rotate(45deg); } + +.height-container { + display: none; + position: relative; + width: 100%; + overflow: hidden; } + .height-container .section { + background: #fff; + border: 1px solid #ddd; + border-top-width: 0; + padding-top: 10px; + padding-bottom: 5px; + padding: 8px 16px; } + +.aside, .language { + padding: 6px 12px; + margin: 12px 0; + border-left: 5px solid #dddddd; + overflow-y: hidden; } + .aside .aside-title, .language .aside-title { + font-size: 9px; + letter-spacing: 2px; + text-transform: uppercase; + padding-bottom: 0; + margin: 0; + color: #aaa; + -webkit-user-select: none; } + .aside p:last-child, .language p:last-child { + margin-bottom: 0; } + +.language { + border-left: 5px solid #cde9f4; } + .language .aside-title { + color: #4183c4; } + +.aside-warning, .aside-deprecated, .aside-unavailable { + border-left: 5px solid #ff6666; } + .aside-warning .aside-title, .aside-deprecated .aside-title, .aside-unavailable .aside-title { + color: #ff0000; } + +.graybox { + border-collapse: collapse; + width: 100%; } + .graybox p { + margin: 0; + word-break: break-word; + min-width: 50px; } + .graybox td { + border: 1px solid #ddd; + padding: 5px 25px 5px 10px; + vertical-align: middle; } + .graybox tr td:first-of-type { + text-align: right; + padding: 7px; + vertical-align: top; + word-break: normal; + width: 40px; } + +.slightly-smaller { + font-size: 0.9em; } + +.footer { + padding: 8px 16px; + background: #444; + color: #ddd; + font-size: 0.8em; } + .footer p { + margin: 8px 0; } + .footer a { + color: #fff; } + +html.dash .header, html.dash .breadcrumbs, html.dash .navigation { + display: none; } + +html.dash .height-container { + display: block; } + +form[role=search] input { + font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 24px; + padding: 0 10px; + margin: 0; + border: none; + border-radius: 1em; } + .loading form[role=search] input { + background: white url(../img/spinner.gif) center right 4px no-repeat; } + +form[role=search] .tt-menu { + margin: 0; + min-width: 300px; + background: #fbfbfb; + color: #333; + border: 1px solid #ddd; } + +form[role=search] .tt-highlight { + font-weight: bold; } + +form[role=search] .tt-suggestion { + font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif; + padding: 0 8px; } + form[role=search] .tt-suggestion span { + display: table-cell; + white-space: nowrap; } + form[role=search] .tt-suggestion .doc-parent-name { + width: 100%; + text-align: right; + font-weight: normal; + font-size: 0.9em; + padding-left: 16px; } + +form[role=search] .tt-suggestion:hover, +form[role=search] .tt-suggestion.tt-cursor { + cursor: pointer; + background-color: #4183c4; + color: #fff; } + +form[role=search] .tt-suggestion:hover .doc-parent-name, +form[role=search] .tt-suggestion.tt-cursor .doc-parent-name { + color: #fff; } diff --git a/docsets/SWCompression.docset/Contents/Info.plist b/docsets/SWCompression.docset/Contents/Info.plist new file mode 100644 index 00000000..176be96d --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleIdentifier + com.jazzy.swcompression + CFBundleName + SWCompression + DocSetPlatformFamily + swcompression + isDashDocset + + dashIndexFilePath + index.html + isJavaScriptEnabled + + DashDocSetFamily + dashtoc + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/7-Zip.html b/docsets/SWCompression.docset/Contents/Resources/Documents/7-Zip.html new file mode 100644 index 00000000..5da99d58 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/7-Zip.html @@ -0,0 +1,369 @@ + + + + 7-Zip Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

7-Zip

+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Archives.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Archives.html new file mode 100644 index 00000000..b49d4a44 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Archives.html @@ -0,0 +1,431 @@ + + + + Archives Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Archives

+ +
+
+ +
+
+
+
    +
  • +
    + + + + GzipArchive + +
    +
    +
    +
    +
    +
    +

    Provides unarchive and archive functions for GZip archives.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class GzipArchive : Archive
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + GzipHeader + +
    +
    +
    +
    +
    +
    +

    Represents the header of a GZip archive.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct GzipHeader
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + XZArchive + +
    +
    +
    +
    +
    +
    +

    Provides unarchive function for XZ archives.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class XZArchive : Archive
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + ZlibArchive + +
    +
    +
    +
    +
    +
    +

    Provides unarchive and archive functions for Zlib archives.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class ZlibArchive : Archive
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + ZlibHeader + +
    +
    +
    +
    +
    +
    +

    Represents the header of a Zlib archive.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ZlibHeader
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/BZip2.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/BZip2.html new file mode 100644 index 00000000..89d944c3 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/BZip2.html @@ -0,0 +1,557 @@ + + + + BZip2 Class Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

BZip2

+
+
+ +
public class BZip2 : DecompressionAlgorithm
+
extension BZip2: CompressionAlgorithm
+ +
+
+

Provides functions for compression and decompression for BZip2 algorithm.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + decompress(data:) + +
    +
    +
    +
    +
    +
    +

    Decompresses data using BZip2 algortihm.

    +
    +

    Throws

    +

    BZip2Error if unexpected byte (bit) sequence was encountered in data. +It may indicate that either data is damaged or it might not be compressed with BZip2 at all.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func decompress(data: Data) throws -> Data
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + data + + +
    +

    Data compressed with BZip2.

    +
    +
    +
    +
    +

    Return Value

    +

    Decompressed data.

    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Decompresses one or more concatenated BZip2 archives found in data.

    +
    +

    Throws

    +

    BZip2Error if an unexpected byte (bit) sequence was encountered or a checksum mismatch is detected for +any archive. It may indicate that the input is damaged or it might not be compressed with BZip2 at all. If +BZip2Error.wrongCRC is thrown, its associated value contains only the bytes decompressed for the archive that +failed the checksum.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func multiDecompress(data: Data) throws -> [Data]
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + data + + +
    +

    Data that may contain one or more concatenated BZip2 archives.

    +
    +
    +
    +
    +

    Return Value

    +

    An array of decompressed data, one element per archive, in the same order as they appear in the input.

    +
    + +
    +
    +
  • +
  • +
    + + + + BlockSize + +
    +
    +
    +
    +
    +
    +

    Represents the size of the blocks in which data is split during BZip2 compression.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum BlockSize : Int
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + compress(data:) + +
    +
    +
    +
    +
    +
    +

    Compresses data with BZip2 algortihm.

    +
    +

    Note

    +

    Input data will be split into blocks of size 100 KB. Use BZip2.compress(data:blockSize:) function to +specify the size of a block.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func compress(data: Data) -> Data
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + data + + +
    +

    Data to compress.

    +
    +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Compresses data with BZip2 algortihm, splitting data into blocks of specified blockSize.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func compress(data: Data, blockSize: BlockSize) -> Data
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + data + + +
    +

    Data to compress.

    +
    +
    + + blockSize + + +
    +

    Size of blocks in which data will be split.

    +
    +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/BZip2/BlockSize.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/BZip2/BlockSize.html new file mode 100644 index 00000000..dd45b542 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/BZip2/BlockSize.html @@ -0,0 +1,561 @@ + + + + BlockSize Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

BlockSize

+
+
+ +
public enum BlockSize : Int
+ +
+
+

Represents the size of the blocks in which data is split during BZip2 compression.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + one + +
    +
    +
    +
    +
    +
    +

    100 KB.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case one = 1
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + two + +
    +
    +
    +
    +
    +
    +

    200 KB.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case two = 2
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + three + +
    +
    +
    +
    +
    +
    +

    300 KB.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case three = 3
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + four + +
    +
    +
    +
    +
    +
    +

    400 KB.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case four = 4
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + five + +
    +
    +
    +
    +
    +
    +

    500 KB.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case five = 5
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + six + +
    +
    +
    +
    +
    +
    +

    600 KB.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case six = 6
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + seven + +
    +
    +
    +
    +
    +
    +

    700 KB.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case seven = 7
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + eight + +
    +
    +
    +
    +
    +
    +

    800 KB.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case eight = 8
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + nine + +
    +
    +
    +
    +
    +
    +

    900 KB.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case nine = 9
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/Deflate.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/Deflate.html new file mode 100644 index 00000000..738bfbfa --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/Deflate.html @@ -0,0 +1,411 @@ + + + + Deflate Class Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Deflate

+
+
+ +
public class Deflate : DecompressionAlgorithm
+
extension Deflate: CompressionAlgorithm
+ +
+
+

Provides functions for compression and decompression for Deflate algorithm.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + decompress(data:) + +
    +
    +
    +
    +
    +
    +

    Decompresses data using Deflate algortihm.

    +
    +

    Note

    +

    This function is specification compliant.

    + +
    +

    Throws

    +

    DeflateError if unexpected byte (bit) sequence was encountered in data. +It may indicate that either data is damaged or it might not be compressed with Deflate at all.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func decompress(data: Data) throws -> Data
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + data + + +
    +

    Data compressed with Deflate.

    +
    +
    +
    +
    +

    Return Value

    +

    Decompressed data.

    +
    + +
    +
    +
  • +
  • +
    + + + + compress(data:) + +
    +
    +
    +
    +
    +
    +

    Compresses data with Deflate algortihm.

    +
    +

    Note

    +

    Currently, SWCompression creates only one block for all data +and the block can either be uncompressed or compressed with static Huffman encoding. +Choice of one block type or the other depends on bytes’ statistics of data. +However, if data size is greater than 65535 (the maximum value stored in 2 bytes), +then static Huffman block will be created.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func compress(data: Data) -> Data
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + data + + +
    +

    Data to compress.

    +
    +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/GzipArchive.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/GzipArchive.html new file mode 100644 index 00000000..072149df --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/GzipArchive.html @@ -0,0 +1,600 @@ + + + + GzipArchive Class Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

GzipArchive

+
+
+ +
public class GzipArchive : Archive
+ +
+
+

Provides unarchive and archive functions for GZip archives.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + Member + +
    +
    +
    +
    +
    +
    +

    Represents the member of a multi-member GZip archive.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Member
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + unarchive(archive:) + +
    +
    +
    +
    +
    +
    +

    Unarchives GZip archive.

    +
    +

    Note

    +

    This function is specification compliant.

    + +
    +

    Throws

    +

    DeflateError or GzipError depending on the type of the problem. +It may indicate that either archive is damaged or it might not be archived with GZip +or compressed with Deflate at all.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func unarchive(archive data: Data) throws -> Data
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + archive + + +
    +

    Data archived with GZip.

    +
    +
    +
    +
    +

    Return Value

    +

    Unarchived data.

    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Unarchives multi-member GZip archive. +Multi-member GZip archives are essentially several GZip archives following each other in a single file.

    +
    +

    Throws

    +

    DeflateError or GzipError depending on the type of the problem. +It may indicate that one of the members of archive is damaged or +it might not be archived with GZip or compressed with Deflate at all.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func multiUnarchive(archive data: Data) throws -> [Member]
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + archive + + +
    +

    GZip archive with one or more members.

    +
    +
    +
    +
    +

    Return Value

    +

    Unarchived data.

    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Archives data into GZip archive, using various specified options. +Data will be also compressed with Deflate algorithm. +It will be also specified in archive’s header that the compressor used the slowest Deflate algorithm.

    +
    +

    Note

    +

    This function is specification compliant.

    + +
    +

    Throws

    +

    GzipError.cannotEncodeISOLatin1 if a file name or a comment cannot be encoded with ISO-Latin-1 encoding +or if the total sum of the binary content length of all extra fields plus 4 for each field exceeds UInt16.max.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func archive(data: Data, comment: String? = nil, fileName: String? = nil,
    +                           writeHeaderCRC: Bool = false, isTextFile: Bool = false,
    +                           osType: FileSystemType? = nil, modificationTime: Date? = nil,
    +                           extraFields: [GzipHeader.ExtraField] = []) throws -> Data
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + data + + +
    +

    Data to compress and archive.

    +
    +
    + + comment + + +
    +

    Additional comment, which will be stored as a separate field in archive.

    +
    +
    + + fileName + + +
    +

    Name of the file which will be archived.

    +
    +
    + + writeHeaderCRC + + +
    +

    Set to true, if you want to store consistency check for archive’s header.

    +
    +
    + + isTextFile + + +
    +

    Set to true, if the file which will be archived is text file or ASCII-file.

    +
    +
    + + osType + + +
    +

    Type of the system on which this archive will be created.

    +
    +
    + + modificationTime + + +
    +

    Last time the file was modified.

    +
    +
    + + extraFields + + +
    +

    Any extra fields. Note that no extra field is allowed to have second byte of the extra +field (subfield) ID equal to zero. In addition, the length of a field’s binary content must be less than +UInt16.max, while the total sum of the binary content length of all extra fields plus 4 for each field must also +not exceed UInt16.max. See GZip format specification for more details.

    +
    +
    +
    +
    +

    Return Value

    +

    Resulting archive’s data.

    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/GzipArchive/Member.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/GzipArchive/Member.html new file mode 100644 index 00000000..90750834 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/GzipArchive/Member.html @@ -0,0 +1,351 @@ + + + + Member Structure Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Member

+
+
+ +
public struct Member
+ +
+
+

Represents the member of a multi-member GZip archive.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + header + +
    +
    +
    +
    +
    +
    +

    GZip header of a member.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let header: GzipHeader
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + data + +
    +
    +
    +
    +
    +
    +

    Unarchived data from a member.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let data: Data
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/LZMA.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/LZMA.html new file mode 100644 index 00000000..261dff40 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/LZMA.html @@ -0,0 +1,450 @@ + + + + LZMA Class Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LZMA

+
+
+ +
public class LZMA : DecompressionAlgorithm
+ +
+
+

Provides decompression function for LZMA.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + decompress(data:) + +
    +
    +
    +
    +
    +
    +

    Decompresses data using LZMA.

    +
    +

    Note

    +

    It is assumed that the first nine bytes of data represent standard LZMA properties (so called “lc”, “lp” +and “pb”), dictionary size, and uncompressed size all encoded with standard encoding scheme of LZMA format.

    + +
    +

    Throws

    +

    LZMAError if unexpected byte (bit) sequence was encountered in data. It may indicate that either data +is damaged or it might not be compressed with LZMA at all.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func decompress(data: Data) throws -> Data
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + data + + +
    +

    Data compressed with LZMA.

    +
    +
    +
    +
    +

    Return Value

    +

    Decompressed data.

    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Decompresses data using LZMA with specified algorithm’s properties, and, optionally, output’s +uncompressedSize. If uncompressedSize is nil, then data must contain finish marker.

    +
    +

    Note

    +

    It is assumed that data begins immediately with LZMA compressed bytes with no LZMA properties at the +beginning.

    + +
    +

    Warning

    +

    There is no validation performed for properties of properties argument. This API is intended to be +used by advanced users.

    + +
    +

    Throws

    +

    LZMAError if unexpected byte (bit) sequence was encountered in data. It may indicate that either data +is damaged or it might not be compressed with LZMA at all.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func decompress(data: Data,
    +                              properties: LZMAProperties,
    +                              uncompressedSize: Int? = nil) throws -> Data
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + data + + +
    +

    Data compressed with LZMA.

    +
    +
    + + properties + + +
    +

    Properties of LZMA (such as lc, lp, etc.)

    +
    +
    + + uncompressedSize + + +
    +

    Size of uncompressed data; nil if it is unknown. In case of nil, finish marker +must be present in data.

    +
    +
    +
    +
    +

    Return Value

    +

    Decompressed data.

    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/LZMA2.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/LZMA2.html new file mode 100644 index 00000000..801fa439 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/LZMA2.html @@ -0,0 +1,353 @@ + + + + LZMA2 Class Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LZMA2

+
+
+ +
public class LZMA2 : DecompressionAlgorithm
+ +
+
+

Provides decompression function for LZMA2 algorithm.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + decompress(data:) + +
    +
    +
    +
    +
    +
    +

    Decompresses data using LZMA2 algortihm.

    +
    +

    Note

    +

    It is assumed that the first byte of data is a dictionary size encoded with standard encoding scheme of +LZMA2 format.

    + +
    +

    Throws

    +

    LZMAError or LZMA2Error if unexpected byte (bit) sequence was encountered in data. +It may indicate that either data is damaged or it might not be compressed with LZMA2 at all.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func decompress(data: Data) throws -> Data
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + data + + +
    +

    Data compressed with LZMA2.

    +
    +
    +
    +
    +

    Return Value

    +

    Decompressed data.

    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/SevenZipContainer.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/SevenZipContainer.html new file mode 100644 index 00000000..13af4938 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/SevenZipContainer.html @@ -0,0 +1,420 @@ + + + + SevenZipContainer Class Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

SevenZipContainer

+
+
+ +
public class SevenZipContainer : Container
+ +
+
+

Provides functions for work with 7-Zip containers.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + open(container:) + +
    +
    +
    +
    +
    +
    +

    Processes 7-Zip container and returns an array of SevenZipEntry with information and data for all entries.

    +
    +

    Important

    +

    The order of entries is defined by 7-Zip container and, particularly, by the creator of a given 7-Zip +container. It is likely that directories will be encountered earlier than files stored in those directories, but no +particular order is guaranteed.

    + +
    +

    Throws

    +

    SevenZipError or any other error associated with compression type depending on the type of the problem. +It may indicate that either container is damaged or it might not be 7-Zip container at all.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func open(container data: Data) throws -> [SevenZipEntry]
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + container + + +
    +

    7-Zip container’s data.

    +
    +
    +
    +
    +

    Return Value

    +

    Array of SevenZipEntry.

    +
    + +
    +
    +
  • +
  • +
    + + + + info(container:) + +
    +
    +
    +
    +
    +
    +

    Processes 7-Zip container and returns an array of SevenZipEntryInfo with information about entries in this +container.

    +
    +

    Important

    +

    The order of entries is defined by 7-Zip container and, particularly, by the creator of a given 7-Zip +container. It is likely that directories will be encountered earlier than files stored in those directories, but no +particular order is guaranteed.

    + +
    +

    Throws

    +

    SevenZipError or any other error associated with compression type depending on the type of the problem. +It may indicate that either container is damaged or it might not be 7-Zip container at all.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func info(container data: Data) throws -> [SevenZipEntryInfo]
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + container + + +
    +

    7-Zip container’s data.

    +
    +
    +
    +
    +

    Return Value

    +

    Array of SevenZipEntryInfo.

    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/TarContainer.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/TarContainer.html new file mode 100644 index 00000000..00efa8d9 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/TarContainer.html @@ -0,0 +1,638 @@ + + + + TarContainer Class Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

TarContainer

+
+
+ +
public class TarContainer : Container
+ +
+
+

Provides functions for work with TAR containers.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + Format + +
    +
    +
    +
    +
    +
    +

    Represents the “format” of a TAR container: a minimal set of extensions to basic TAR format required to +successfully read a particular container.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Format
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + formatOf(container:) + +
    +
    +
    +
    +
    +
    +

    Processes TAR container and returns its “format”: a minimal set of extensions to basic TAR format required to +successfully read this container.

    +
    +

    Throws

    +

    TarError, which may indicate that either container is damaged or it might not be TAR container at all.

    + +
    +

    See also

    +

    TarContainer.Format

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func formatOf(container data: Data) throws -> Format
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + container + + +
    +

    TAR container’s data.

    +
    +
    +
    + +
    +
    +
  • +
  • +
    + + + + create(from:) + +
    +
    +
    +
    +
    +
    +

    Creates a new TAR container with entries as its content and generates its Data.

    +
    +

    See also

    +

    TarEntryInfo properties documenation to see how their values are connected with the specific TAR +format used during container creation.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func create(from entries: [TarEntry]) -> Data
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + entries + + +
    +

    TAR entries to store in the container.

    +
    +
    +
    + +
    +
    +
  • +
  • +
    + + + + create(from:force:) + +
    +
    +
    +
    +
    +
    +

    Creates a new TAR container with entries as its content and generates its Data using the specified format.

    + +

    This function forces the usage of the format, meaning that certain properties of the entries may be missing +from the resulting container data if the chosen format does not support corresponding features. For example, +relatively long names (and linknames) will be truncated if the .ustar or .prePosix format is specified.

    + +

    It is highly recommended to use the TarContainer.create(from:) function (or use the .pax format) to ensure the +best representation of the entries in the output. Other (non-PAX) formats should only be used if you have a +specific need for them and you understand limitations of those formats.

    +
    +

    See also

    +

    TarEntryInfo properties documenation to see how their values are connected with the specific TAR +format used during container creation.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func create(from entries: [TarEntry], force format: TarContainer.Format) -> Data
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + entries + + +
    +

    TAR entries to store in the container.

    +
    +
    + + force + + +
    +

    Force the usage of the specified format.

    +
    +
    +
    + +
    +
    +
  • +
  • +
    + + + + open(container:) + +
    +
    +
    +
    +
    +
    +

    Processes TAR container and returns an array of TarEntry with information and data for all entries.

    +
    +

    Important

    +

    The order of entries is defined by TAR container and, particularly, by the creator of a given TAR +container. It is likely that directories will be encountered earlier than files stored in those directories, but no +particular order is guaranteed.

    + +
    +

    Throws

    +

    TarError, which may indicate that either container is damaged or it might not be TAR container at all.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func open(container data: Data) throws -> [TarEntry]
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + container + + +
    +

    TAR container’s data.

    +
    +
    +
    +
    +

    Return Value

    +

    Array of TarEntry.

    +
    + +
    +
    +
  • +
  • +
    + + + + info(container:) + +
    +
    +
    +
    +
    +
    +

    Processes TAR container and returns an array of TarEntryInfo with information about entries in this container.

    +
    +

    Important

    +

    The order of entries is defined by TAR container and, particularly, by the creator of a given TAR +container. It is likely that directories will be encountered earlier than files stored in those directories, but no +particular order is guaranteed.

    + +
    +

    Throws

    +

    TarError, which may indicate that either container is damaged or it might not be TAR container at all.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func info(container data: Data) throws -> [TarEntryInfo]
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + container + + +
    +

    TAR container’s data.

    +
    +
    +
    +
    +

    Return Value

    +

    Array of TarEntryInfo.

    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/TarContainer/Format.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/TarContainer/Format.html new file mode 100644 index 00000000..a684cc95 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/TarContainer/Format.html @@ -0,0 +1,412 @@ + + + + Format Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Format

+
+
+ +
public enum Format
+ +
+
+

Represents the “format” of a TAR container: a minimal set of extensions to basic TAR format required to +successfully read a particular container.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + prePosix + +
    +
    +
    +
    +
    +
    +

    Pre POSIX format (aka “basic TAR format”).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case prePosix
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + ustar + +
    +
    +
    +
    +
    +
    +

    “UStar” format introduced by POSIX IEEE P1003.1 standard.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case ustar
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + gnu + +
    +
    +
    +
    +
    +
    +

    “UStar”-like format with GNU extensions (e.g. special container entries for long file and link names).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case gnu
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + pax + +
    +
    +
    +
    +
    +
    +

    “PAX” format introduced by POSIX.1-2001 standard, a set of extensions to “UStar” format.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case pax
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/XZArchive.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/XZArchive.html new file mode 100644 index 00000000..b8f1fcd8 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/XZArchive.html @@ -0,0 +1,418 @@ + + + + XZArchive Class Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

XZArchive

+
+
+ +
public class XZArchive : Archive
+ +
+
+

Provides unarchive function for XZ archives.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + unarchive(archive:) + +
    +
    +
    +
    +
    +
    +

    Unarchives XZ archive. Archives with multiple streams are supported, +but uncompressed data from each stream will be combined into single Data object.

    + +

    If an error happens during LZMA2 decompression, then LZMAError or LZMA2Error will be thrown.

    +
    +

    Throws

    +

    LZMAError, LZMA2Error or XZError depending on the type of the problem. +Particularly, if filters other than LZMA2 are used in archive, then XZError.wrongFilterID will be thrown, +but it may also indicate that either the archive is damaged or +it might not be compressed with XZ or LZMA(2) at all.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func unarchive(archive data: Data) throws -> Data
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + archive + + +
    +

    Data archived using XZ format.

    +
    +
    +
    +
    +

    Return Value

    +

    Unarchived data.

    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Unarchives XZ archive. Archives with multiple streams are supported, +and uncompressed data from each stream will be stored in a separate element in the array

    + +

    If data passed is not actually XZ archive, XZError will be thrown. +Particularly, if filters other than LZMA2 are used in archive, then XZError.wrongFilterID will be thrown.

    + +

    If an error happens during LZMA2 decompression, then LZMAError or LZMA2Error will be thrown.

    +
    +

    Throws

    +

    LZMAError, LZMA2Error or XZError depending on the type of the problem. +It may indicate that either the archive is damaged or it might not be compressed with XZ or LZMA(2) at all.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func splitUnarchive(archive data: Data) throws -> [Data]
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + archive + + +
    +

    Data archived using XZ format.

    +
    +
    +
    +
    +

    Return Value

    +

    Array of unarchived data from every stream in archive.

    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/ZipContainer.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/ZipContainer.html new file mode 100644 index 00000000..77ba21ec --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/ZipContainer.html @@ -0,0 +1,461 @@ + + + + ZipContainer Class Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ZipContainer

+
+
+ +
public class ZipContainer : Container
+ +
+
+

Provides functions for work with ZIP containers.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + customExtraFields + +
    +
    +
    +
    +
    +
    +

    Contains user-defined extra fields. When either ZipContainer.info(container:) or ZipContainer.open(container:) +function encounters extra field without built-in support, it uses this dictionary and tries to find a corresponding +user-defined extra field. If an approriate custom extra field is found and successfully processed, then the result +is stored in ZipEntryInfo.customExtraFields.

    + +

    To enable support of custom extra field one must add a new entry to this dictionary. The value of this entry must +be a user-defined type which conforms to ZipExtraField protocol. The key must be equal to the ID of user-defined +extra field and type’s id property.

    +
    +

    Warning

    + Modifying this dictionary while either info(container:) or open(container:) function is being +executed may cause undefined behavior. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var customExtraFields: [UInt16 : any ZipExtraField.Type]
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + open(container:) + +
    +
    +
    +
    +
    +
    +

    Processes ZIP container and returns an array of ZipEntry with information and data for all entries.

    +
    +

    Important

    +

    The order of entries is defined by ZIP container and, particularly, by the creator of a given ZIP +container. It is likely that directories will be encountered earlier than files stored in those directories, but no +particular order is guaranteed.

    + +
    +

    Throws

    +

    ZipError or any other error associated with compression type, depending on the type of the problem. +It may indicate that either container is damaged or it might not be ZIP container at all.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func open(container data: Data) throws -> [ZipEntry]
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + container + + +
    +

    ZIP container’s data.

    +
    +
    +
    +
    +

    Return Value

    +

    Array of ZipEntry.

    +
    + +
    +
    +
  • +
  • +
    + + + + info(container:) + +
    +
    +
    +
    +
    +
    +

    Processes ZIP container and returns an array of ZipEntryInfo with information about entries in this container.

    +
    +

    Important

    +

    The order of entries is defined by ZIP container and, particularly, by the creator of a given ZIP +container. It is likely that directories will be encountered earlier than files stored in those directories, but no +particular order is guaranteed.

    + +
    +

    Throws

    +

    ZipError, which may indicate that either container is damaged or it might not be ZIP container at all.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func info(container data: Data) throws -> [ZipEntryInfo]
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + container + + +
    +

    ZIP container’s data.

    +
    +
    +
    +
    +

    Return Value

    +

    Array of ZipEntryInfo.

    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/ZlibArchive.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/ZlibArchive.html new file mode 100644 index 00000000..2b452d67 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/ZlibArchive.html @@ -0,0 +1,412 @@ + + + + ZlibArchive Class Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ZlibArchive

+
+
+ +
public class ZlibArchive : Archive
+ +
+
+

Provides unarchive and archive functions for Zlib archives.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + unarchive(archive:) + +
    +
    +
    +
    +
    +
    +

    Unarchives Zlib archive.

    +
    +

    Note

    +

    This function is specification compliant.

    + +
    +

    Throws

    +

    DeflateError or ZlibError depending on the type of the problem. +It may indicate that either archive is damaged or it might not be archived with Zlib +or compressed with Deflate at all.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func unarchive(archive data: Data) throws -> Data
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + archive + + +
    +

    Data archived with Zlib.

    +
    +
    +
    +
    +

    Return Value

    +

    Unarchived data.

    +
    + +
    +
    +
  • +
  • +
    + + + + archive(data:) + +
    +
    +
    +
    +
    +
    +

    Archives data into Zlib archive. Data will be also compressed with Deflate algorithm. +It will also be specified in archive’s header that the compressor used the slowest Deflate algorithm.

    +
    +

    Note

    +

    This function is specification compliant.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func archive(data: Data) -> Data
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + data + + +
    +

    Data to compress and archive.

    +
    +
    +
    +
    +

    Return Value

    +

    Resulting archive’s data.

    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Common Auxiliary Types.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Common Auxiliary Types.html new file mode 100644 index 00000000..98117738 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Common Auxiliary Types.html @@ -0,0 +1,432 @@ + + + + Common Auxiliary Types Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Common Auxiliary Types

+ +
+
+ +
+
+
+
    +
  • +
    + + + + ContainerEntryType + +
    +
    +
    +
    +
    +
    +

    Represents the type of a container entry.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ContainerEntryType
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + DosAttributes + +
    +
    +
    +
    +
    +
    +

    Represents file attributes in DOS format.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct DosAttributes : OptionSet
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + Permissions + +
    +
    +
    +
    +
    +
    +

    Represents file access permissions in UNIX format.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Permissions : OptionSet
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + CompressionMethod + +
    +
    +
    +
    +
    +
    +

    Represents a (de)compression method.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CompressionMethod
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + FileSystemType + +
    +
    +
    +
    +
    +
    +

    Represents the type of the file system on which an archive or container was created. File system determines the meaning +of file attributes.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum FileSystemType
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Compression.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Compression.html new file mode 100644 index 00000000..e94e3ffd --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Compression.html @@ -0,0 +1,465 @@ + + + + Compression Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Compression

+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/BZip2Error.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/BZip2Error.html new file mode 100644 index 00000000..b7c65114 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/BZip2Error.html @@ -0,0 +1,600 @@ + + + + BZip2Error Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

BZip2Error

+
+
+ +
public enum BZip2Error : Error
+ +
+
+

Represents an error which happened during BZip2 decompression. +It may indicate that either data is damaged or it might not be compressed with BZip2 at all.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + wrongMagic + +
    +
    +
    +
    +
    +
    +

    ‘Magic’ number is not 0x425a.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongMagic
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongVersion + +
    +
    +
    +
    +
    +
    +

    BZip version is not 2.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongVersion
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongBlockSize + +
    +
    +
    +
    +
    +
    +

    Unsupported block size (not from ‘0’ to ‘9’).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongBlockSize
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongBlockType + +
    +
    +
    +
    +
    +
    +

    Unsupported block type (is neither ‘pi’ nor ‘sqrt(pi)’).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongBlockType
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + randomizedBlock + +
    +
    +
    +
    +
    +
    +

    Block is randomized.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case randomizedBlock
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongHuffmanGroups + +
    +
    +
    +
    +
    +
    +

    Wrong number of Huffman tables/groups (should be between 2 and 6).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongHuffmanGroups
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongSelector + +
    +
    +
    +
    +
    +
    +

    Selector is greater than the total number of Huffman tables/groups.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongSelector
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Wrong length of Huffman code (should be between 0 and 20).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongHuffmanCodeLength
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + symbolNotFound + +
    +
    +
    +
    +
    +
    +

    Symbol wasn’t found in Huffman tree.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case symbolNotFound
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongCRC(_:) + +
    +
    +
    +
    +
    +
    +

    Computed checksum of the uncompressed data does not match the value stored in the archive. +Associated value contains the data that were successfully decompressed up to the point where the mismatch was +detected.

    + +
      +
    • When using BZip2.decompress(data:): The associated value comes from a single BZip2 archive. If the mismatch +happens at the final checksum verification, this is usually the entire decompressed output.

    • +
    • When using BZip2.multiDecompress(data:): The input may contain several concatenated BZip2 archives. The error +is thrown for the current archive that fails the checksum. The associated value contains only the data decompressed +for that archive. Results from earlier archives are not included and are not returned once this error is thrown.

    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongCRC(Data)
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/CompressionMethod.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/CompressionMethod.html new file mode 100644 index 00000000..37ac4082 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/CompressionMethod.html @@ -0,0 +1,469 @@ + + + + CompressionMethod Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

CompressionMethod

+
+
+ +
public enum CompressionMethod
+ +
+
+

Represents a (de)compression method.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + bzip2 + +
    +
    +
    +
    +
    +
    +

    BZip2.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case bzip2
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + copy + +
    +
    +
    +
    +
    +
    +

    Copy (no compression).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case copy
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + deflate + +
    +
    +
    +
    +
    +
    +

    Deflate.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case deflate
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + lzma + +
    +
    +
    +
    +
    +
    +

    LZMA.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case lzma
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + lzma2 + +
    +
    +
    +
    +
    +
    +

    LZMA 2.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case lzma2
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + other + +
    +
    +
    +
    +
    +
    +

    Other/unknown method.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case other
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/ContainerEntryType.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/ContainerEntryType.html new file mode 100644 index 00000000..abf986e8 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/ContainerEntryType.html @@ -0,0 +1,589 @@ + + + + ContainerEntryType Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ContainerEntryType

+
+
+ +
public enum ContainerEntryType
+ +
+
+

Represents the type of a container entry.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + blockSpecial + +
    +
    +
    +
    +
    +
    +

    Block special file.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case blockSpecial
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + characterSpecial + +
    +
    +
    +
    +
    +
    +

    Character special file.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case characterSpecial
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + contiguous + +
    +
    +
    +
    +
    +
    +

    Contiguous file.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case contiguous
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + directory + +
    +
    +
    +
    +
    +
    +

    Directory.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case directory
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + fifo + +
    +
    +
    +
    +
    +
    +

    FIFO special file.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fifo
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + hardLink + +
    +
    +
    +
    +
    +
    +

    Hard link.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case hardLink
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + regular + +
    +
    +
    +
    +
    +
    +

    Regular file.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case regular
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + socket + +
    +
    +
    +
    +
    +
    +

    Socket.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case socket
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + symbolicLink + +
    +
    +
    +
    +
    +
    +

    Symbolic link.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case symbolicLink
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + unknown + +
    +
    +
    +
    +
    +
    +

    Entry type is unknown.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case unknown
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/DataError.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/DataError.html new file mode 100644 index 00000000..02f658c7 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/DataError.html @@ -0,0 +1,412 @@ + + + + DataError Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

DataError

+
+
+ +
public enum DataError : Error, Equatable
+ +
+
+

Represents an error which happened during processing input data.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + truncated + +
    +
    +
    +
    +
    +
    +

    Indicates that input data is likely truncated or incomplete.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case truncated
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + corrupted + +
    +
    +
    +
    +
    +
    +

    Indicates that input data is corrupted, e.g. does not conform to the format specifications or contains other +invalid values.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case corrupted
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + checksumMismatch(_:) + +
    +
    +
    +
    +
    +
    +

    Indicates that the computed checksum of the output data does not match the stored checksum. While usually the +associated value contains the output from all processed inputs up to and including the point when this error was +thrown, it is still recommended to check the documenation of a function to confirm this.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case checksumMismatch([Data])
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + unsupportedFeature + +
    +
    +
    +
    +
    +
    +

    Indicates that input data was created using a feature that is not supported by the processing function.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case unsupportedFeature
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/DeflateError.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/DeflateError.html new file mode 100644 index 00000000..3db48763 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/DeflateError.html @@ -0,0 +1,410 @@ + + + + DeflateError Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

DeflateError

+
+
+ +
public enum DeflateError : Error
+ +
+
+

Represents an error which happened during Deflate compression or decompression. +It may indicate that either the data is damaged or it might not be compressed with Deflate at all.

+ + +
+
+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Uncompressed block’s length and nlength bytes isn’t consistent with each other.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongUncompressedBlockLengths
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongBlockType + +
    +
    +
    +
    +
    +
    +

    Unknown block type (not 0, 1 or 2).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongBlockType
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongSymbol + +
    +
    +
    +
    +
    +
    +

    Decoded symbol was found in Huffman tree but is unknown.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongSymbol
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + symbolNotFound + +
    +
    +
    +
    +
    +
    +

    Symbol wasn’t found in Huffman tree.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case symbolNotFound
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/FileSystemType.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/FileSystemType.html new file mode 100644 index 00000000..0e201d68 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/FileSystemType.html @@ -0,0 +1,445 @@ + + + + FileSystemType Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

FileSystemType

+
+
+ +
public enum FileSystemType
+ +
+
+

Represents the type of the file system on which an archive or container was created. File system determines the meaning +of file attributes.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + fat + +
    +
    +
    +
    +
    +
    +

    FAT filesystem.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fat
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + macintosh + +
    +
    +
    +
    +
    +
    +

    Filesystem of older Macintosh systems.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case macintosh
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + ntfs + +
    +
    +
    +
    +
    +
    +

    NTFS.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case ntfs
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + other + +
    +
    +
    +
    +
    +
    +

    Other/unknown file system.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case other
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + unix + +
    +
    +
    +
    +
    +
    +

    One of many file systems of UNIX-like OS.

    +
    +

    Note

    + Modern macOS systems also fall into this category. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case unix
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/GzipError.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/GzipError.html new file mode 100644 index 00000000..9987baa1 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/GzipError.html @@ -0,0 +1,509 @@ + + + + GzipError Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

GzipError

+
+
+ +
public enum GzipError : Error
+ +
+
+

Represents an error which happened while processing a GZip archive. +It may indicate that either archive is damaged or it might not be GZip archive at all.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + wrongMagic + +
    +
    +
    +
    +
    +
    +

    First two bytes (‘magic’ number) of archive isn’t 31 and 139.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongMagic
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Compression method used in archive is different from Deflate, which is the only supported one.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongCompressionMethod
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongFlags + +
    +
    +
    +
    +
    +
    +

    One of the reserved fields in archive has an unexpected value, which can also mean (apart from damaged archive), +that archive uses a newer version of GZip format.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongFlags
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongHeaderCRC + +
    +
    +
    +
    +
    +
    +

    Computed CRC of archive’s header doesn’t match the value stored in archive.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongHeaderCRC
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongCRC(_:) + +
    +
    +
    +
    +
    +
    +

    Computed checksum of uncompressed data doesn’t match the value stored in the archive. +Associated value of the error contains GzipArchive.Members for all already decompressed data:

    + +
      +
    • if unarchive function was called then associated array will have only one element, +since this function always processes only first member of archive.
    • +
    • if multiUnarchive function was called then associated array will have an element +for each already decompressed member, including the one with mismatching checksum.
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongCRC([GzipArchive.Member])
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongISize + +
    +
    +
    +
    +
    +
    +

    Computed ‘isize’ didn’t match the value stored in the archive.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongISize
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + cannotEncodeISOLatin1 + +
    +
    +
    +
    +
    +
    +

    Either specified file name or comment cannot be encoded using ISO Latin-1 encoding.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case cannotEncodeISOLatin1
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/LZ4.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/LZ4.html new file mode 100644 index 00000000..05fbff16 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/LZ4.html @@ -0,0 +1,710 @@ + + + + LZ4 Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LZ4

+
+
+ +
public enum LZ4 : DecompressionAlgorithm
+
extension LZ4: CompressionAlgorithm
+ +
+
+

Provides functions for compression and decompression for LZ4 algorithm.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + decompress(data:) + +
    +
    +
    +
    +
    +
    +

    Decompresses data using LZ4 algortihm.

    + +

    Use LZ4.decompress(data:dictionary:dictionaryID:) instead, if the data was compressed with an external dictionary. +Otherwise, the decompression will result in an error or incorrect output.

    +
    +

    Throws

    +

    DataError.corrupted or DataError.truncated if the data is corrupted or truncated. +DataError.checksumMismatch is thrown with uncompressed data as its associated value if the computed checksum of +the uncompressed data does not match the stored checksum. DataError.unsupportedFeature is thrown when the value +of a field inside the frame, such as uncompressed data size, is incompatible with the maximum integer size of the +current platform.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func decompress(data: Data) throws -> Data
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + data + + +
    +

    Data compressed with LZ4. If data represents several concatenated LZ4 frames, only the first +frame will be processed; use LZ4.multiDecompress(data:dictionary:dictionaryID:) instead to decompress all the +frames.

    +
    +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Decompresses data using LZ4 algortihm and provided external dictionary.

    +
    +

    Throws

    +

    DataError.corrupted or DataError.truncated if the data is corrupted or truncated. +DataError.checksumMismatch is thrown with uncompressed data as its associated value if the computed checksum of +the uncompressed data does not match the stored checksum. DataError.unsupportedFeature is thrown when the value +of a field inside the frame, such as uncompressed data size, is incompatible with the maximum integer size of the +current platform.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func decompress(data: Data, dictionary: Data?, dictionaryID: UInt32? = nil) throws -> Data
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + data + + +
    +

    Data compressed with LZ4. If data represents several concatenated LZ4 frames, only the first +frame will be processed; use LZ4.multiDecompress(data:dictionary:dictionaryID:) instead to decompress all the +frames.

    +
    +
    + + dictionary + + +
    +

    External dictionary which will be used during decompression. Providing incorrect dictionary +(not the one that was used for compression), no dictionary at all (if one was used for compression), or providing a +dictionary when no dictionary was used for compression will result in an error or incorrect output.

    +
    +
    + + dictionaryID + + +
    +

    Optional dictionary ID, which must match the one stored in the frame. If no dictionary +ID is present in the frame, then this argument is ignored.

    +
    +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Decompresses data, which may represent several concatenated LZ4 frames, using LZ4 algortihm and provided external +dictionary.

    +
    +

    Throws

    +

    DataError.corrupted or DataError.truncated if the data is corrupted or truncated. +DataError.checksumMismatch is thrown if the computed checksum of the uncompressed data does not match the stored +checksum. The associated value in this case contains uncompressed data from all the frames up to and including the +one that caused this error. DataError.unsupportedFeature is thrown when the value of a field inside a frame, such +as uncompressed data size, is incompatible with the maximum integer size of the current platform.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func multiDecompress(data: Data, dictionary: Data? = nil, dictionaryID: UInt32? = nil) throws -> [Data]
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + data + + +
    +

    Data compressed with LZ4. If data represents several concatenated LZ4 frames, all of them will +be processed.

    +
    +
    + + dictionary + + +
    +

    External dictionary which will be used during decompression of all encountered frames. +Providing incorrect dictionary (not the one that was used for compression), no dictionary at all (if one was used +for compression), or providing a dictionary when no dictionary was used for compression will result in an error or +incorrect output.

    +
    +
    + + dictionaryID + + +
    +

    Optional dictionary ID, which must match the one stored in all frames. If no dictionary +ID is present in a frame, then this argument is ignored for that frame.

    +
    +
    +
    +
    +

    Return Value

    +

    An array with uncompressed data from each processed non-skippable LZ4 frame as its elements.

    +
    + +
    +
    +
  • +
  • +
    + + + + compress(data:) + +
    +
    +
    +
    +
    +
    +

    Compresses data using LZ4 algortihm with default format and algorithm options.

    + +

    The default options include: independent blocks, do not save checksums for compressed blocks, save the checksum of +the uncompressed data, do not save the size of the uncompressed data, use 4 MB block size, no dictionary.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func compress(data: Data) -> Data
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Compresses data using LZ4 algortihm.

    + +

    This function allows to customize format and alogrithm options or use an external dictionary to compress the data.

    +
    +

    Precondition

    +

    blockSize must be greater than zero and less than or equal to 4194304 (4 MB).

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func compress(data: Data, independentBlocks: Bool, blockChecksums: Bool,
    +                             contentChecksum: Bool, contentSize: Bool, blockSize: Int = 4 * 1024 * 1024,
    +                             dictionary: Data? = nil, dictionaryID: UInt32? = nil) -> Data
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + data + + +
    +

    Data to compress.

    +
    +
    + + independentBlocks + + +
    +

    True, if compressed blocks should be independent of each other. Setting this to +false may improve compression ratio at the cost of decompression speed.

    +
    +
    + + blockChecksums + + +
    +

    True, if the checksums of the compressed blocks should be stored in the output.

    +
    +
    + + contentChecksum + + +
    +

    True, if the checksum of the uncompressed data should be stored in the output.

    +
    +
    + + contentSize + + +
    +

    True, if the size of the uncompressed data should be stored in the output.

    +
    +
    + + blockSize + + +
    +

    Size of uncompressed blocks in bytes. The default and maximum value is 4194304 (4 MB).

    +
    +
    + + dictionary + + +
    +

    External dictionary which will be used during compression. The same dictionary then must +be used for successful decompression.

    +
    +
    + + dictionaryID + + +
    +

    Optional dictionary ID which will be stored in the output. The same dictionary ID then +is likely to be required for successful decompression.

    +
    +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/LZMA2Error.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/LZMA2Error.html new file mode 100644 index 00000000..028d6869 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/LZMA2Error.html @@ -0,0 +1,411 @@ + + + + LZMA2Error Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LZMA2Error

+
+
+ +
public enum LZMA2Error : Error
+ +
+
+

Represents an error which happened during LZMA2 decompression. +It may indicate that either data is damaged or it might not be compressed with LZMA2 at all.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + wrongDictionarySize + +
    +
    +
    +
    +
    +
    +

    Dictionary size is too big, or has reserved bits set, or is in incorrect format in general.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongDictionarySize
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongControlByte + +
    +
    +
    +
    +
    +
    +

    Unknown conrol byte value of LZMA2 packet.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongControlByte
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongReset + +
    +
    +
    +
    +
    +
    +

    Unknown reset instruction encountered in LZMA2 packet.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongReset
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongSizes + +
    +
    +
    +
    +
    +
    +

    Either size of decompressed data isn’t equal to the one specified in LZMA2 packet or +amount of compressed data read is different from the one stored in LZMA2 packet.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongSizes
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/LZMAError.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/LZMAError.html new file mode 100644 index 00000000..3aac5c6d --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/LZMAError.html @@ -0,0 +1,500 @@ + + + + LZMAError Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LZMAError

+
+
+ +
public enum LZMAError : Error
+ +
+
+

Represents an error which happened during LZMA decompression. +It may indicate that either data is damaged or it might not be compressed with LZMA at all.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + wrongProperties + +
    +
    +
    +
    +
    +
    +

    Properties’ byte is greater than 225.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongProperties
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + rangeDecoderInitError + +
    +
    +
    +
    +
    +
    +

    Unable to initialize RanderDecorer.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case rangeDecoderInitError
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Size of uncompressed data hit specified limit in the middle of decoding.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case exceededUncompressedSize
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + windowIsEmpty + +
    +
    +
    +
    +
    +
    +

    Unable to perfrom repeat-distance decoding because there is nothing to repeat.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case windowIsEmpty
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    End of stream marker is reached, but range decoder is in incorrect state.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case rangeDecoderFinishError
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + repeatWillExceed + +
    +
    +
    +
    +
    +
    +

    The number of bytes to repeat is greater than the amount bytes that is left to decode.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case repeatWillExceed
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + notEnoughToRepeat + +
    +
    +
    +
    +
    +
    +

    The amount of already decoded bytes is smaller than repeat length.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case notEnoughToRepeat
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/SevenZipError.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/SevenZipError.html new file mode 100644 index 00000000..6a3bc34f --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/SevenZipError.html @@ -0,0 +1,620 @@ + + + + SevenZipError Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

SevenZipError

+
+
+ +
public enum SevenZipError : Error
+ +
+
+

Represents an error which happened while processing a 7-Zip container. +It may indicate that either container is damaged or it might not be 7-Zip container at all.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + wrongSignature + +
    +
    +
    +
    +
    +
    +

    Wrong container’s signature.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongSignature
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongFormatVersion + +
    +
    +
    +
    +
    +
    +

    Unsupported version of container’s format.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongFormatVersion
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongCRC + +
    +
    +
    +
    +
    +
    +

    CRC either of one of the files from the container or one of the container’s strucutures is incorrect.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongCRC
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongSize + +
    +
    +
    +
    +
    +
    +

    Size either of one of the files from the container or one of the container’s strucutures is incorrect.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongSize
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + startPosNotSupported + +
    +
    +
    +
    +
    +
    +

    Files have StartPos property. This feature isn’t supported.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case startPosNotSupported
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + externalNotSupported + +
    +
    +
    +
    +
    +
    +

    External feature isn’t supported.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case externalNotSupported
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Coders with multiple in and/or out streams aren’t supported.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case multiStreamNotSupported
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Additional streams feature isn’t supported.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case additionalStreamsNotSupported
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Entry is compressed using unsupported compression method.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case compressionNotSupported
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Entry or container’s header is encrypted. This feature isn’t supported.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case encryptionNotSupported
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Unknown/incorrect internal 7-Zip structure was encountered or a required internal structure is missing.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case internalStructureError
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/TarCreateError.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/TarCreateError.html new file mode 100644 index 00000000..12738204 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/TarCreateError.html @@ -0,0 +1,329 @@ + + + + TarCreateError Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

TarCreateError

+
+
+ +
public enum TarCreateError : Error
+ +
+
+

Represents an error which happened during the creation of a new TAR container.

+
+

Note

+ This error type is never used and will be removed in the next major update. + +
+ + +
+
+ +
+
+
+
    +
  • +
    + + + + utf8NonEncodable + +
    +
    +
    +
    +
    +
    +

    One of the TarEntryInfo‘s string properties (such as name) cannot be encoded with UTF-8 encoding.

    +
    +

    Note

    + This error is never thrown and will be removed in the next major update. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case utf8NonEncodable
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/TarError.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/TarError.html new file mode 100644 index 00000000..e93462a7 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/TarError.html @@ -0,0 +1,410 @@ + + + + TarError Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

TarError

+
+
+ +
public enum TarError : Error
+ +
+
+

Represents an error which happened while processing a TAR container. +It may indicate that either container is damaged or it might not be TAR container at all.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + tooSmallFileIsPassed + +
    +
    +
    +
    +
    +
    +

    Data is unexpectedly truncated.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case tooSmallFileIsPassed
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongField + +
    +
    +
    +
    +
    +
    +

    Failed to process a required TAR header’s field.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongField
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongHeaderChecksum + +
    +
    +
    +
    +
    +
    +

    Computed checksum of a header doesn’t match the value stored in container.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongHeaderChecksum
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongPaxHeaderEntry + +
    +
    +
    +
    +
    +
    +

    Entry from PAX extended header is in incorrect format.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongPaxHeaderEntry
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/XZError.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/XZError.html new file mode 100644 index 00000000..7f22aae8 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/XZError.html @@ -0,0 +1,575 @@ + + + + XZError Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

XZError

+
+
+ +
public enum XZError : Error
+ +
+
+

Represents an error which happened while unarchiving an XZ archive. +It may indicate that either archive is damaged or it might not be XZ archive at all.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + wrongMagic + +
    +
    +
    +
    +
    +
    +

    Either ‘magic’ number in header or footer isn’t equal to a predefined value.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongMagic
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongField + +
    +
    +
    +
    +
    +
    +

    One of the special fields in archive has an incorrect value, +which can mean both damaged archive or that archive uses a newer version of XZ format.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongField
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongInfoCRC + +
    +
    +
    +
    +
    +
    +

    Checksum of one of the fields of archive doesn’t match the value stored in archive.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongInfoCRC
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongFilterID + +
    +
    +
    +
    +
    +
    +

    Filter used in archive is unsupported.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongFilterID
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + checkTypeSHA256 + +
    +
    +
    +
    +
    +
    +

    Archive uses SHA-256 checksum which is unsupported.

    +
    +

    Note

    + This error is never thrown and will be removed in the next major update. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case checkTypeSHA256
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongDataSize + +
    +
    +
    +
    +
    +
    +

    Either size of decompressed data isn’t equal to the one specified in archive or +amount of compressed data read is different from the one stored in archive.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongDataSize
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongCheck(_:) + +
    +
    +
    +
    +
    +
    +

    Computed checksum of uncompressed data doesn’t match the value stored in the archive. +Associated value of the error contains already decompressed data:

    + +
      +
    • if unarchive function was called then associated array will have only one element +with combined data for all already decompressed streams, including the one with mismatching checksum.
    • +
    • if splitUnarchive function was called then associated array will have an element +for each already decompressed stream, including the one with mismatching checksum.
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongCheck([Data])
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongPadding + +
    +
    +
    +
    +
    +
    +

    Padding (null-bytes appended to an archive’s structure) is incorrect.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongPadding
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + multiByteIntegerError + +
    +
    +
    +
    +
    +
    +

    Either null byte encountered or exceeded maximum amount bytes while reading multi byte number.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case multiByteIntegerError
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/ZipError.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/ZipError.html new file mode 100644 index 00000000..de573f27 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/ZipError.html @@ -0,0 +1,621 @@ + + + + ZipError Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ZipError

+
+
+ +
public enum ZipError : Error
+ +
+
+

Represents an error which happened while processing a ZIP container. +It may indicate that either container is damaged or it might not be ZIP container at all.

+ + +
+
+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    End of Central Directoty record wasn’t found.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case notFoundCentralDirectoryEnd
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongSignature + +
    +
    +
    +
    +
    +
    +

    Wrong signature of one of container’s structures.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongSignature
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongSize + +
    +
    +
    +
    +
    +
    +

    Wrong either compressed or uncompressed size of a container’s entry.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongSize
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongVersion + +
    +
    +
    +
    +
    +
    +

    Version needed to process container is unsupported.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongVersion
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Container is either spanned or consists of several volumes. These features aren’t supported.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case multiVolumesNotSupported
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Entry or record is encrypted. This feature isn’t supported.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case encryptionNotSupported
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + patchingNotSupported + +
    +
    +
    +
    +
    +
    +

    Entry contains patched data. This feature isn’t supported.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case patchingNotSupported
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Entry is compressed using unsupported compression method.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case compressionNotSupported
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongLocalHeader + +
    +
    +
    +
    +
    +
    +

    Local header of an entry is inconsistent with Central Directory.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongLocalHeader
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongCRC(_:) + +
    +
    +
    +
    +
    +
    +

    Computed checksum of entry’s data doesn’t match the value stored in the archive. +Associated value of the error contains ZipEntry objects for all already processed entries:

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongCRC([ZipEntry])
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongTextField + +
    +
    +
    +
    +
    +
    +

    Either entry’s comment or file name cannot be processed using UTF-8 encoding.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongTextField
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/ZipExtraFieldLocation.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/ZipExtraFieldLocation.html new file mode 100644 index 00000000..14161e9b --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/ZipExtraFieldLocation.html @@ -0,0 +1,349 @@ + + + + ZipExtraFieldLocation Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ZipExtraFieldLocation

+
+
+ +
public enum ZipExtraFieldLocation
+ +
+
+

Location of ZIP extra field inside a container.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + centralDirectory + +
    +
    +
    +
    +
    +
    +

    ZIP extra field is located in container’s Central Directory.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case centralDirectory
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + localHeader + +
    +
    +
    +
    +
    +
    +

    ZIP extra field is located in one of container’s Local Headers.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case localHeader
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/ZlibError.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/ZlibError.html new file mode 100644 index 00000000..6dae2917 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/ZlibError.html @@ -0,0 +1,441 @@ + + + + ZlibError Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ZlibError

+
+
+ +
public enum ZlibError : Error
+ +
+
+

Represents an error which happened while processing a Zlib archive. +It may indicate that either archive is damaged or it might not be Zlib archive at all.

+ + +
+
+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Compression method used in archive is different from Deflate, which is the only supported one.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongCompressionMethod
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongCompressionInfo + +
    +
    +
    +
    +
    +
    +

    Compression info has value incompatible with Deflate compression method.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongCompressionInfo
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongFcheck + +
    +
    +
    +
    +
    +
    +

    First two bytes of archive’s flags are inconsistent with each other.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongFcheck
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongCompressionLevel + +
    +
    +
    +
    +
    +
    +

    Compression level has value, which is different from the supported ones.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongCompressionLevel
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + wrongAdler32(_:) + +
    +
    +
    +
    +
    +
    +

    Computed checksum of uncompressed data doesn’t match the value stored in archive. +Associated value of the error contains already decompressed data.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case wrongAdler32(Data)
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Errors.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Errors.html new file mode 100644 index 00000000..b8fa3bc4 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Errors.html @@ -0,0 +1,663 @@ + + + + Errors Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Errors

+ +
+
+ +
+
+
+
    +
  • +
    + + + + BZip2Error + +
    +
    +
    +
    +
    +
    +

    Represents an error which happened during BZip2 decompression. +It may indicate that either data is damaged or it might not be compressed with BZip2 at all.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum BZip2Error : Error
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + DataError + +
    +
    +
    +
    +
    +
    +

    Represents an error which happened during processing input data.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum DataError : Error, Equatable
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + DeflateError + +
    +
    +
    +
    +
    +
    +

    Represents an error which happened during Deflate compression or decompression. +It may indicate that either the data is damaged or it might not be compressed with Deflate at all.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum DeflateError : Error
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + GzipError + +
    +
    +
    +
    +
    +
    +

    Represents an error which happened while processing a GZip archive. +It may indicate that either archive is damaged or it might not be GZip archive at all.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum GzipError : Error
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + LZMAError + +
    +
    +
    +
    +
    +
    +

    Represents an error which happened during LZMA decompression. +It may indicate that either data is damaged or it might not be compressed with LZMA at all.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum LZMAError : Error
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + LZMA2Error + +
    +
    +
    +
    +
    +
    +

    Represents an error which happened during LZMA2 decompression. +It may indicate that either data is damaged or it might not be compressed with LZMA2 at all.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum LZMA2Error : Error
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + SevenZipError + +
    +
    +
    +
    +
    +
    +

    Represents an error which happened while processing a 7-Zip container. +It may indicate that either container is damaged or it might not be 7-Zip container at all.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum SevenZipError : Error
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + TarCreateError + +
    +
    +
    +
    +
    +
    +

    Represents an error which happened during the creation of a new TAR container.

    +
    +

    Note

    + This error type is never used and will be removed in the next major update. + +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum TarCreateError : Error
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + TarError + +
    +
    +
    +
    +
    +
    +

    Represents an error which happened while processing a TAR container. +It may indicate that either container is damaged or it might not be TAR container at all.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum TarError : Error
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + XZError + +
    +
    +
    +
    +
    +
    +

    Represents an error which happened while unarchiving an XZ archive. +It may indicate that either archive is damaged or it might not be XZ archive at all.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum XZError : Error
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + ZipError + +
    +
    +
    +
    +
    +
    +

    Represents an error which happened while processing a ZIP container. +It may indicate that either container is damaged or it might not be ZIP container at all.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ZipError : Error
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + ZlibError + +
    +
    +
    +
    +
    +
    +

    Represents an error which happened while processing a Zlib archive. +It may indicate that either archive is damaged or it might not be Zlib archive at all.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ZlibError : Error
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols.html new file mode 100644 index 00000000..daa1c27b --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols.html @@ -0,0 +1,462 @@ + + + + Protocols Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Protocols

+ +
+
+ +
+
+
+
    +
  • +
    + + + + Archive + +
    +
    +
    +
    +
    +
    +

    A type that represents an archive.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol Archive
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + Container + +
    +
    +
    +
    +
    +
    +

    A type that represents a container with files, directories and/or other data.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol Container
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + ContainerEntry + +
    +
    +
    +
    +
    +
    +

    A type that represents an entry from the container with its data and information.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol ContainerEntry
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + ContainerEntryInfo + +
    +
    +
    +
    +
    +
    +

    A type that provides access to information about an entry from the container.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol ContainerEntryInfo
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + CompressionAlgorithm + +
    +
    +
    +
    +
    +
    +

    A type that provides an implementation of a particular compression algorithm.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol CompressionAlgorithm
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    A type that provides an implementation of a particular decompression algorithm.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol DecompressionAlgorithm
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/Archive.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/Archive.html new file mode 100644 index 00000000..73354815 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/Archive.html @@ -0,0 +1,319 @@ + + + + Archive Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Archive

+
+
+ +
public protocol Archive
+ +
+
+

A type that represents an archive.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + unarchive(archive:) + +
    +
    +
    +
    +
    +
    +

    Unarchive data from the archive.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static func unarchive(archive: Data) throws -> Data
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/CompressionAlgorithm.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/CompressionAlgorithm.html new file mode 100644 index 00000000..67bb1580 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/CompressionAlgorithm.html @@ -0,0 +1,319 @@ + + + + CompressionAlgorithm Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

CompressionAlgorithm

+
+
+ +
public protocol CompressionAlgorithm
+ +
+
+

A type that provides an implementation of a particular compression algorithm.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + compress(data:) + +
    +
    +
    +
    +
    +
    +

    Compress data with particular algorithm.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static func compress(data: Data) throws -> Data
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/Container.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/Container.html new file mode 100644 index 00000000..ad970b30 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/Container.html @@ -0,0 +1,379 @@ + + + + Container Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Container

+
+
+ +
public protocol Container
+ +
+
+

A type that represents a container with files, directories and/or other data.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + Entry + +
    +
    +
    +
    +
    +
    +

    A type that represents an entry from this container.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    associatedtype Entry : ContainerEntry
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + open(container:) + +
    +
    +
    +
    +
    +
    +

    Retrieve all container entries with their data.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static func open(container: Data) throws -> [Entry]
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + info(container:) + +
    +
    +
    +
    +
    +
    +

    Retrieve information about all container entries (without their data).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static func info(container: Data) throws -> [Entry.Info]
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/ContainerEntry.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/ContainerEntry.html new file mode 100644 index 00000000..5303c7e9 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/ContainerEntry.html @@ -0,0 +1,384 @@ + + + + ContainerEntry Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ContainerEntry

+
+
+ +
public protocol ContainerEntry
+ +
+
+

A type that represents an entry from the container with its data and information.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + Info + +
    +
    +
    +
    +
    +
    +

    A type that provides information about an entry.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    associatedtype Info : ContainerEntryInfo
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + info + +
    +
    +
    +
    +
    +
    +

    Provides access to information about the entry.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var info: Info { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + data + +
    +
    +
    +
    +
    +
    +

    Entry’s data (nil if entry is a directory or data isn’t available).

    +
    +

    Note

    + It is assumed that the compression provided by the container is yet to be applied to data. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var data: Data? { get }
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/ContainerEntryInfo.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/ContainerEntryInfo.html new file mode 100644 index 00000000..4f2ecce2 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/ContainerEntryInfo.html @@ -0,0 +1,499 @@ + + + + ContainerEntryInfo Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ContainerEntryInfo

+
+
+ +
public protocol ContainerEntryInfo
+ +
+
+

A type that provides access to information about an entry from the container.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    +

    Entry’s name.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var name: String { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + type + +
    +
    +
    +
    +
    +
    +

    Entry’s type.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var type: ContainerEntryType { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + size + +
    +
    +
    +
    +
    +
    +

    Entry’s data size (can be nil if either data or size aren’t available).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var size: Int? { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + accessTime + +
    +
    +
    +
    +
    +
    +

    Entry’s last access time (nil, if not available).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var accessTime: Date? { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + creationTime + +
    +
    +
    +
    +
    +
    +

    Entry’s creation time (nil, if not available).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var creationTime: Date? { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + modificationTime + +
    +
    +
    +
    +
    +
    +

    Entry’s last modification time (nil, if not available).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var modificationTime: Date? { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + permissions + +
    +
    +
    +
    +
    +
    +

    Entry’s permissions in POSIX format (nil, if not available).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var permissions: Permissions? { get }
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/DecompressionAlgorithm.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/DecompressionAlgorithm.html new file mode 100644 index 00000000..bb4fc4ae --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/DecompressionAlgorithm.html @@ -0,0 +1,319 @@ + + + + DecompressionAlgorithm Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

DecompressionAlgorithm

+
+
+ +
public protocol DecompressionAlgorithm
+ +
+
+

A type that provides an implementation of a particular decompression algorithm.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + decompress(data:) + +
    +
    +
    +
    +
    +
    +

    Decompress data compressed with particular algorithm.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static func decompress(data: Data) throws -> Data
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/ZipExtraField.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/ZipExtraField.html new file mode 100644 index 00000000..7a60d064 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/ZipExtraField.html @@ -0,0 +1,463 @@ + + + + ZipExtraField Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ZipExtraField

+
+
+ +
public protocol ZipExtraField
+ +
+
+

A type that represents an extra field from a ZIP container.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + id + +
    +
    +
    +
    +
    +
    +

    ID of extra field. Must be equal to the key of extra field in ZipContainer.customExtraFields dictionary and +instance id property

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static var id: UInt16 { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + location + +
    +
    +
    +
    +
    +
    +

    Location of extra field. Must be equal to the value of location argument of init?(_:_:location:).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var location: ZipExtraFieldLocation { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + size + +
    +
    +
    +
    +
    +
    +

    Size of extra field’s data. Must be equal to the value of the second argument of init?(_:_:location:).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var size: Int { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + init(_:_:location:) + +
    +
    +
    +
    +
    +
    +

    Creates an extra field instance reading size amount of data from byteReader.

    + +

    It is guaranteed that the offset of byteReader is equal to the position right after extra field header ID and +length of extra field data. It is also guaranteed that header ID matches conforming type’s static id property.

    + +

    Following conditions are checked after execution of this initializer. Failure to satisfy them in conforming type +will result in runtime error.

    +
    +

    Postcondition

    + location property of a created instance must be equal to the location argument. + +
    +

    Postcondition

    + size property of a created instance must be equal to the second argument. + +
    +

    Postcondition

    + exactly size amount of bytes must be read by initializer from byteReader. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    init?(_ byteReader: LittleEndianByteReader, _ size: Int, location: ZipExtraFieldLocation)
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + id + + + Extension method + +
    +
    +
    +
    +
    +
    +

    ID of extra field. Must be equal to the key of extra field in ZipContainer.customExtraFields dictionary and +static id property

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var id: UInt16 { get }
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/DosAttributes.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/DosAttributes.html new file mode 100644 index 00000000..61635df8 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/DosAttributes.html @@ -0,0 +1,529 @@ + + + + DosAttributes Structure Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

DosAttributes

+
+
+ +
public struct DosAttributes : OptionSet
+ +
+
+

Represents file attributes in DOS format.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + rawValue + +
    +
    +
    +
    +
    +
    +

    Raw bit flags value.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let rawValue: UInt32
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + init(rawValue:) + +
    +
    +
    +
    +
    +
    +

    Initializes attributes with bit flags.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(rawValue: UInt32)
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + archive + +
    +
    +
    +
    +
    +
    +

    File is archive or archived.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let archive: DosAttributes
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + directory + +
    +
    +
    +
    +
    +
    +

    File is a directory.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let directory: DosAttributes
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + volume + +
    +
    +
    +
    +
    +
    +

    File is a volume.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let volume: DosAttributes
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + system + +
    +
    +
    +
    +
    +
    +

    File is a system file.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let system: DosAttributes
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + hidden + +
    +
    +
    +
    +
    +
    +

    File is hidden.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let hidden: DosAttributes
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + readOnly + +
    +
    +
    +
    +
    +
    +

    File is read-only.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let readOnly: DosAttributes
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/GzipHeader.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/GzipHeader.html new file mode 100644 index 00000000..ee792706 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/GzipHeader.html @@ -0,0 +1,592 @@ + + + + GzipHeader Structure Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

GzipHeader

+
+
+ +
public struct GzipHeader
+ +
+
+

Represents the header of a GZip archive.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + compressionMethod + +
    +
    +
    +
    +
    +
    +

    Compression method of archive. Always .deflate for GZip archives.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var compressionMethod: CompressionMethod
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + modificationTime + +
    +
    +
    +
    +
    +
    +

    The most recent modification time of the original file. If corresponding archive’s field is set to 0, which means +that no time was specified, then this property is nil.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var modificationTime: Date?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + osType + +
    +
    +
    +
    +
    +
    +

    Type of file system on which archivation took place.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var osType: FileSystemType
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + fileName + +
    +
    +
    +
    +
    +
    +

    Name of the original file. If archive doesn’t contain file’s name, then nil.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var fileName: String?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + comment + +
    +
    +
    +
    +
    +
    +

    Comment stored in archive. If archive doesn’t contain any comment, then nil.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var comment: String?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + isTextFile + +
    +
    +
    +
    +
    +
    +

    True, if file is likely to be text file or ASCII-file.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isTextFile: Bool
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + extraFields + +
    +
    +
    +
    +
    +
    +

    Extra fields present in the header.

    +
    +

    Note

    + This feature of the GZip format is extremely rarely used, so in vast majority of cases this property +contains an empty array. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var extraFields: [ExtraField]
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + init(archive:) + +
    +
    +
    +
    +
    +
    +

    Initializes the structure with the values from the first ‘member’ of GZip archive.

    +
    +

    Throws

    +

    GzipError. It may indicate that either archive is damaged or +it might not be archived with GZip at all.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(archive data: Data) throws
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + archive + + +
    +

    Data archived with GZip.

    +
    +
    +
    + +
    +
    +
  • +
  • +
    + + + + ExtraField + +
    +
    +
    +
    +
    +
    +

    Represents an extra field in the header of a GZip archive.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ExtraField
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/GzipHeader/ExtraField.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/GzipHeader/ExtraField.html new file mode 100644 index 00000000..7f63895f --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/GzipHeader/ExtraField.html @@ -0,0 +1,411 @@ + + + + ExtraField Structure Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ExtraField

+
+
+ +
public struct ExtraField
+ +
+
+

Represents an extra field in the header of a GZip archive.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + si1 + +
    +
    +
    +
    +
    +
    +

    First byte of the extra field (subfield) ID.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let si1: UInt8
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + si2 + +
    +
    +
    +
    +
    +
    +

    Second byte of the extra field (subfield) ID.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let si2: UInt8
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + bytes + +
    +
    +
    +
    +
    +
    +

    Binary content of the extra field.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var bytes: [UInt8]
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + init(_:_:_:) + +
    +
    +
    +
    +
    +
    +

    Initializes an extra field with the specified extra field (subfield) ID bytes and its binary content.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(_ si1: UInt8, _ si2: UInt8, _ bytes: [UInt8])
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/LZMAProperties.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/LZMAProperties.html new file mode 100644 index 00000000..c5d9cf74 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/LZMAProperties.html @@ -0,0 +1,480 @@ + + + + LZMAProperties Structure Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

LZMAProperties

+
+
+ +
public struct LZMAProperties
+ +
+
+

Properties of LZMA. This API is intended to be used by advanced users.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + lc + +
    +
    +
    +
    +
    +
    +

    Number of bits used for the literal encoding context. Default value is 3.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var lc: Int
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + lp + +
    +
    +
    +
    +
    +
    +

    Number of bits to include in “literal position state”. Default value is 0.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var lp: Int
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + pb + +
    +
    +
    +
    +
    +
    +

    Number of bits to include in “position state”. Default value is 2.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var pb: Int
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + dictionarySize + +
    +
    +
    +
    +
    +
    +

    Size of the dictionary. Default value is 1 << 24.

    +
    +

    Note

    + Dictionary size cannot be less than 4096. In case of attempt to set it to the value less than 4096 it will +be automatically set to 4096 instead. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var dictionarySize: Int { get set }
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Initializes LZMA properties with values of lc, lp, pb, and dictionary size.

    +
    +

    Note

    + It is not tested if values of lc, lp, and pb are valid. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(lc: Int, lp: Int, pb: Int, dictionarySize: Int)
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + init() + +
    +
    +
    +
    +
    +
    +

    Initializes LZMA properties with default values of lc, lp, pb, and dictionary size.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init()
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/Permissions.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/Permissions.html new file mode 100644 index 00000000..4e4eee05 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/Permissions.html @@ -0,0 +1,709 @@ + + + + Permissions Structure Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

Permissions

+
+
+ +
public struct Permissions : OptionSet
+ +
+
+

Represents file access permissions in UNIX format.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + rawValue + +
    +
    +
    +
    +
    +
    +

    Raw bit flags value (in decimal).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let rawValue: UInt32
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + init(rawValue:) + +
    +
    +
    +
    +
    +
    +

    Initializes permissions with bit flags in decimal.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(rawValue: UInt32)
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + setuid + +
    +
    +
    +
    +
    +
    +

    Set UID.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let setuid: Permissions
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + setgid + +
    +
    +
    +
    +
    +
    +

    Set GID.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let setgid: Permissions
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + sticky + +
    +
    +
    +
    +
    +
    +

    Sticky bit.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let sticky: Permissions
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + readOwner + +
    +
    +
    +
    +
    +
    +

    Owner can read.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let readOwner: Permissions
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + writeOwner + +
    +
    +
    +
    +
    +
    +

    Owner can write.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let writeOwner: Permissions
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + executeOwner + +
    +
    +
    +
    +
    +
    +

    Owner can execute.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let executeOwner: Permissions
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + readGroup + +
    +
    +
    +
    +
    +
    +

    Group can read.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let readGroup: Permissions
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + writeGroup + +
    +
    +
    +
    +
    +
    +

    Group can write.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let writeGroup: Permissions
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + executeGroup + +
    +
    +
    +
    +
    +
    +

    Group can execute.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let executeGroup: Permissions
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + readOther + +
    +
    +
    +
    +
    +
    +

    Others can read.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let readOther: Permissions
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + writeOther + +
    +
    +
    +
    +
    +
    +

    Others can write.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let writeOther: Permissions
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + executeOther + +
    +
    +
    +
    +
    +
    +

    Others can execute.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let executeOther: Permissions
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/SevenZipEntry.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/SevenZipEntry.html new file mode 100644 index 00000000..d35f5f9a --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/SevenZipEntry.html @@ -0,0 +1,347 @@ + + + + SevenZipEntry Structure Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

SevenZipEntry

+
+
+ +
public struct SevenZipEntry : ContainerEntry
+ +
+
+

Represents an entry from the 7-Zip container.

+ + +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/SevenZipEntryInfo.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/SevenZipEntryInfo.html new file mode 100644 index 00000000..7d729356 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/SevenZipEntryInfo.html @@ -0,0 +1,696 @@ + + + + SevenZipEntryInfo Structure Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

SevenZipEntryInfo

+
+
+ +
public struct SevenZipEntryInfo : ContainerEntryInfo
+ +
+
+

Provides access to information about an entry from the 7-Zip container.

+ + +
+
+ +
+
+
+
+ + +
+ +

ContainerEntryInfo +

+
+
+ +
+
+
+ + +
+ +

7-Zip specific +

+
+
+
    +
  • +
    + + + + winAttributes + +
    +
    +
    +
    +
    +
    +

    Entry’s “win attributes”. 7-Zip internal property. +May be useful when origin file system’s attributes weren’t POSIX compatible.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let winAttributes: UInt32?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + dosAttributes + +
    +
    +
    +
    +
    +
    +

    Entry’s attributes in DOS format.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let dosAttributes: DosAttributes?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + hasStream + +
    +
    +
    +
    +
    +
    +

    True, if entry has a stream (data) inside the container. 7-Zip internal propety.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let hasStream: Bool
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + isEmpty + +
    +
    +
    +
    +
    +
    +

    True, if entry is an empty file. 7-Zip internal property.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let isEmpty: Bool
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + isAnti + +
    +
    +
    +
    +
    +
    +

    True, if entry is an anti-file. Used in differential backups to indicate that file should be deleted. +7-Zip internal property.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let isAnti: Bool
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + crc + +
    +
    +
    +
    +
    +
    +

    CRC32 of entry’s data.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let crc: UInt32?
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/TarEntry.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/TarEntry.html new file mode 100644 index 00000000..edb7efea --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/TarEntry.html @@ -0,0 +1,416 @@ + + + + TarEntry Structure Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

TarEntry

+
+
+ +
public struct TarEntry : ContainerEntry
+ +
+
+

Represents an entry from the TAR container.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + info + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var info: TarEntryInfo
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + data + +
    +
    +
    +
    +
    +
    +

    Entry’s data (nil if entry is a directory or data isn’t available).

    +
    +

    Note

    + Accessing setter of this property causes info.size to be updated as well so it remains equal to +data.count. If data is set to be nil then info.size is set to zero. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var data: Data? { get set }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + init(info:data:) + +
    +
    +
    +
    +
    +
    +

    Initializes the entry with its info and data. The stored info.size will also be updated to be equal to +data.count. If data is nil then info.size will be set to zero.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(info: TarEntryInfo, data: Data?)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + info + + +
    +

    Information about entry.

    +
    +
    + + data + + +
    +

    Entry’s data; nil if entry is a directory or data isn’t available.

    +
    +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/TarEntryInfo.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/TarEntryInfo.html new file mode 100644 index 00000000..4b1afacf --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/TarEntryInfo.html @@ -0,0 +1,1054 @@ + + + + TarEntryInfo Structure Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

TarEntryInfo

+
+
+ +
public struct TarEntryInfo : ContainerEntryInfo
+ +
+
+

Provides access to information about an entry from the TAR container.

+ + +
+
+ +
+
+
+
+ + +
+ +

ContainerEntryInfo +

+
+
+
    +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    +

    Entry’s name.

    + +

    Depending on the particular format of the container, different container’s structures are used +to set this property, in the following preference order:

    + +
      +
    1. Local PAX extended header “path” property.
    2. +
    3. Global PAX extended header “path” property.
    4. +
    5. GNU format type “L” (LongName) entry.
    6. +
    7. Default TAR header.
    8. +
    +
    +

    Note

    + When a new TAR container is created, if name cannot be encoded with ASCII or its ASCII byte-representation +is longer than 100 bytes then a PAX extended header will be created to represent this value correctly, unless other +format is forced. + +
    +

    Note

    + When creating new TAR container, name is always encoded with UTF-8 in the basic TAR header. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var name: String
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + size + +
    +
    +
    +
    +
    +
    +

    Entry’s data size.

    +
    +

    Note

    + This property cannot be directly modified. Instead it is updated automatically to be equal to its parent’s +entry.data.count. + +
    +

    Note

    + When a new TAR container is created, if size is bigger than 8589934591 then a PAX extended header will be +created to represent this value correctly, unless other format is forced. In addition, base-256 encoding will be +used to encode this value in the basic TAR header. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public internal(set) var size: Int? { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + type + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let type: ContainerEntryType
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + accessTime + +
    +
    +
    +
    +
    +
    +

    Entry’s last access time (only available for PAX format; nil otherwise).

    +
    +

    Note

    + When a new TAR container is created, if accessTime is not nil then a PAX extended header will be created +to store this property, unless other format is forced. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var accessTime: Date?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + creationTime + +
    +
    +
    +
    +
    +
    +

    Entry’s creation time (only available for PAX format; nil otherwise).

    +
    +

    Note

    + When a new TAR container is created, if creationTime is not nil then a PAX extended header will be +created to store this property, unless other format is forced. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var creationTime: Date?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + modificationTime + +
    +
    +
    +
    +
    +
    +

    Entry’s last modification time.

    +
    +

    Note

    + When a new TAR container is created, if modificationTime is bigger than 8589934591 then a PAX extended +header will be created to represent this value correctly, unless other format is forced. In addition, base-256 +encoding will be used to encode this value in the basic TAR header. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var modificationTime: Date?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + permissions + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var permissions: Permissions?
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ + +
+ +

TAR specific +

+
+
+
    +
  • +
    + + + + compressionMethod + +
    +
    +
    +
    +
    +
    +

    Entry’s compression method. Always .copy for the entries of TAR containers.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let compressionMethod: CompressionMethod
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + ownerID + +
    +
    +
    +
    +
    +
    +

    ID of entry’s owner.

    +
    +

    Note

    + When a new TAR container is created, if ownerID is bigger than 2097151 then a PAX extended header will be +created to represent this value correctly, unless other format is forced. In addition, base-256 encoding will be +used to encode this value in the basic TAR header. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var ownerID: Int?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + groupID + +
    +
    +
    +
    +
    +
    +

    ID of the group of entry’s owner.

    +
    +

    Note

    + When a new TAR container is created, if groupID is bigger than 2097151 then a PAX extended header will be +created to represent this value correctly, unless other format is forced. In addition, base-256 encoding will be +used to encode this value in the basic TAR header. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var groupID: Int?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + ownerUserName + +
    +
    +
    +
    +
    +
    +

    User name of entry’s owner.

    +
    +

    Note

    + When a new TAR container is created, if ownerUserName cannot be encoded with ASCII or its ASCII +byte-representation is longer than 32 bytes then a PAX extended header will be created to represent this value +correctly, unless other format is forced. + +
    +

    Note

    + When creating new TAR container, ownerUserName is always encoded with UTF-8 in the ustar header. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var ownerUserName: String?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + ownerGroupName + +
    +
    +
    +
    +
    +
    +

    Name of the group of entry’s owner.

    +
    +

    Note

    + When new TAR container is created, if ownerGroupName cannot be encoded with ASCII or its ASCII +byte-representation is longer than 32 bytes then a PAX extended header will be created to represent this value +correctly, unless other format is forced. + +
    +

    Note

    + When creating new TAR container, ownerGroupName is always encoded with UTF-8 in the ustar header. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var ownerGroupName: String?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + deviceMajorNumber + +
    +
    +
    +
    +
    +
    +

    Device major number (used when entry is either block or character special file).

    +
    +

    Note

    + When new TAR container is created, if deviceMajorNumber is bigger than 2097151 then base-256 encoding +will be used to encode this value in ustar header. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var deviceMajorNumber: Int?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + deviceMinorNumber + +
    +
    +
    +
    +
    +
    +

    Device minor number (used when entry is either block or character special file).

    +
    +

    Note

    + When new TAR container is created, if deviceMinorNumber is bigger than 2097151 then base-256 encoding +will be used to encode this value in ustar header. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var deviceMinorNumber: Int?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + charset + +
    +
    +
    +
    +
    +
    +

    Name of the character set used to encode entry’s data (only available for PAX format; nil otherwise).

    +
    +

    Note

    + When new TAR container is created, if charset is not nil then a PAX extended header will be created to +store this property, unless other format is forced. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var charset: String?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + comment + +
    +
    +
    +
    +
    +
    +

    Entry’s comment (only available for PAX format; nil otherwise).

    +
    +

    Note

    + When new TAR container is created, if comment is not nil then a PAX extended header will be created to +store this property, unless other format is forced. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var comment: String?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + linkName + +
    +
    +
    +
    +
    +
    +

    Path to a linked file for symbolic link entry.

    + +

    Depending on the particular format of the container, different container’s structures are used +to set this property, in the following preference order:

    + +
      +
    1. Local PAX extended header “linkpath” property.
    2. +
    3. Global PAX extended header “linkpath” property.
    4. +
    5. GNU format type “K” (LongLink) entry.
    6. +
    7. Default TAR header.
    8. +
    +
    +

    Note

    + When new TAR container is created, if linkName cannot be encoded with ASCII or its ASCII +byte-representation is longer than 100 bytes then a PAX extended header will be created to represent this value +correctly, unless other format is forced. + +
    +

    Note

    + When creating new TAR container, linkName is always encoded with UTF-8 in basic TAR header. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var linkName: String
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    All custom (unknown) records from global and local PAX extended headers. nil, if there were no headers.

    +
    +

    Note

    + When new TAR container is created, if unknownExtendedHeaderRecords is not nil then a local PAX +extended header will be created to store this property, unless other format is forced. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var unknownExtendedHeaderRecords: [String : String]?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + init(name:type:) + +
    +
    +
    +
    +
    +
    +

    Initializes the entry’s info with its name and type.

    +
    +

    Note

    +

    Entry’s type cannot be modified after initialization.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(name: String, type: ContainerEntryType)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + name + + +
    +

    Entry’s name.

    +
    +
    + + type + + +
    +

    Entry’s type.

    +
    +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/TarReader.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/TarReader.html new file mode 100644 index 00000000..16361de4 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/TarReader.html @@ -0,0 +1,437 @@ + + + + TarReader Structure Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

TarReader

+
+
+ +
public struct TarReader
+ +
+
+

A type that allows to iteratively read TAR entries from a container provided by a FileHandle.

+ +

The TarReader may be helpful in reducing the peak memory usage on certain platforms. However, to achieve this either +the TarReader.process(_:) function should be used or both the call to TarReader.read() and the processing of the +returned entry should be wrapped inside the autoreleasepool. Since the autoreleasepool is available only on Darwin +platforms, the memory reducing effect may be not as significant on non-Darwin platforms (such as Linux or Windows).

+ +

The following code demonstrates an example usage of the TarReader:

+
   let handle: FileHandle = ...
+   let reader = TarReader(fileHandle: handle)
+   try reader.process { ... }
+   ...
+   try handle.close()
+
+ +

Note that closing the FileHandle remains the responsibility of the caller.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + init(fileHandle:) + +
    +
    +
    +
    +
    +
    +

    Creates a new instance for reading TAR entries from the provided fileHandle.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(fileHandle: FileHandle)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + fileHandle + + +
    +

    A handle from which the entries will be read. Note that the TarReader does not close the +fileHandle and this remains the responsibility of the caller.

    +
    +
    +
    + +
    +
    +
  • +
  • +
    + + + + process(_:) + +
    +
    +
    +
    +
    +
    +

    Processes the next TAR entry by reading it from the container and calling the provided closure on the result. If +the argument supplied to the closure is nil this indicates that the end of the input was reached.

    + +

    On Darwin platforms both the reading and the call to the closure are performed inside the autoreleasepool which +allows to reduce the peak memory usage.

    +
    +

    Throws

    + DataError.truncated if the input is truncated. TarError is thrown in case of malformed input. Errors +thrown by FileHandle operations are also propagated. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public mutating func process<T>(_ transform: (TarEntry?) throws -> T) throws -> T
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + read() + +
    +
    +
    +
    +
    +
    +

    Reads the next TAR entry from the container.

    + +

    On Darwin platforms it is recommended to wrap both the call to this function and the follow-up processing inside +the autoreleasepool in order to reduce the peak memory usage.

    +
    +

    Throws

    +

    DataError.truncated if the input is truncated. TarError is thrown in case of malformed input. Errors +thrown by FileHandle operations are also propagated.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public mutating func read() throws -> TarEntry?
    + +
    +
    +
    +

    Return Value

    +

    The next entry from the container or nil if the end of the input has been reached.

    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/TarWriter.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/TarWriter.html new file mode 100644 index 00000000..21c6042c --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/TarWriter.html @@ -0,0 +1,453 @@ + + + + TarWriter Structure Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

TarWriter

+
+
+ +
public struct TarWriter
+ +
+
+

A type that allows to iteratively create TAR containers with the output being written into a FileHandle.

+ +

The TarWriter may be helpful in reducing the peak memory usage on certain platforms. However, to achieve this both +the creation of TAR entries and the calls to TarWriter should be wrapped inside the autoreleasepool. Since the +autoreleasepool is available only on Darwin platforms, the memory reducing effect may be not as significant on +non-Darwin platforms (such as Linux or Windows).

+ +

The following code demonstrates an example usage of the TarWriter:

+
   let handle: FileHandle = ...
+   let writer = TarWriter(fileHandle: handle)
+   try autoreleasepool {
+       let entry: TarEntry = ...
+       try writer.append(entry)
+   }
+   try writer.finalize()
+   try handle.close()
+
+ +

Note that TarWriter.finalize() must be called after finishing appending entries to the container. In addition, +closing the FileHandle remains the responsibility of the caller.

+ + +
+
+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Creates a new instance for writing TAR entries using the specified format into the provided fileHandle.

    + +

    The TarWriter will be forced to use the provided format, meaning that certain properties of the entries may +be missing from the output data if the chosen format does not support corresponding features. The default .pax +format supports the largest set of features. Other (non-PAX) formats should only be used if you have a specific +need for them and you understand limitations of those formats.

    +
    +

    Important

    +

    TarWriter.finalize() must be called after all entries have been appended.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(fileHandle: FileHandle, force format: TarContainer.Format = .pax)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + fileHandle + + +
    +

    A handle into which the output will be written. Note that the TarWriter does not +close the fileHandle and this remains the responsibility of the caller.

    +
    +
    + + force + + +
    +

    Force the usage of the specified format.

    +
    +
    +
    + +
    +
    +
  • +
  • +
    + + + + append(_:) + +
    +
    +
    +
    +
    +
    +

    Adds a new TAR entry at the end of the TAR container.

    + +

    On Darwin platforms it is recommended to wrap both the initialization of a TarEntry and the call to this +function inside the autoreleasepool in order to reduce the peak memory usage.

    +
    +

    Throws

    + Errors from the FileHandle operations. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public mutating func append(_ entry: TarEntry) throws
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + finalize() + +
    +
    +
    +
    +
    +
    +

    Finalizes the TAR container by adding an EOF marker.

    +
    +

    Throws

    + Errors from the FileHandle operations. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func finalize() throws
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZipEntry.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZipEntry.html new file mode 100644 index 00000000..1399bef4 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZipEntry.html @@ -0,0 +1,347 @@ + + + + ZipEntry Structure Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ZipEntry

+
+
+ +
public struct ZipEntry : ContainerEntry
+ +
+
+

Represents an entry from the ZIP container.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + info + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let info: ZipEntryInfo
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + data + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let data: Data?
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZipEntryInfo.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZipEntryInfo.html new file mode 100644 index 00000000..155891aa --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZipEntryInfo.html @@ -0,0 +1,861 @@ + + + + ZipEntryInfo Structure Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ZipEntryInfo

+
+
+ +
public struct ZipEntryInfo : ContainerEntryInfo
+ +
+
+

Provides access to information about an entry from the ZIP container.

+ + +
+
+ +
+
+
+
+ + +
+ +

ContainerEntryInfo +

+
+
+
    +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let name: String
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + size + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let size: Int?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + type + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let type: ContainerEntryType
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + accessTime + +
    +
    +
    +
    +
    +
    +

    Entry’s last access time (nil, if not available).

    + +

    Set from different sources in the following preference order:

    + +
      +
    1. Extended timestamp extra field (most common on UNIX-like systems).
    2. +
    3. NTFS extra field.
    4. +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let accessTime: Date?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + creationTime + +
    +
    +
    +
    +
    +
    +

    Entry’s creation time (nil, if not available).

    + +

    Set from different sources in the following preference order:

    + +
      +
    1. Extended timestamp extra field (most common on UNIX-like systems).
    2. +
    3. NTFS extra field.
    4. +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let creationTime: Date?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + modificationTime + +
    +
    +
    +
    +
    +
    +

    Entry’s last modification time.

    + +

    Set from different sources in the following preference order:

    + +
      +
    1. Extended timestamp extra field (most common on UNIX-like systems).
    2. +
    3. NTFS extra field.
    4. +
    5. ZIP container’s own storage (in Central Directory entry).
    6. +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let modificationTime: Date?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + permissions + +
    +
    +
    +
    +
    +
    +

    Entry’s permissions in POSIX format. +May have meaningless value if origin file system’s attributes weren’t POSIX compatible.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let permissions: Permissions?
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ + +
+ +

ZIP specific +

+
+
+
    +
  • +
    + + + + comment + +
    +
    +
    +
    +
    +
    +

    Entry’s comment.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let comment: String
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Entry’s external file attributes. ZIP internal property. +May be useful when origin file system’s attributes weren’t POSIX compatible.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let externalFileAttributes: UInt32
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + dosAttributes + +
    +
    +
    +
    +
    +
    +

    Entry’s attributes in DOS format.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let dosAttributes: DosAttributes?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + isTextFile + +
    +
    +
    +
    +
    +
    +

    True, if entry is likely to be text or ASCII file.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let isTextFile: Bool
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + fileSystemType + +
    +
    +
    +
    +
    +
    +

    File system type of container’s origin.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let fileSystemType: FileSystemType
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + compressionMethod + +
    +
    +
    +
    +
    +
    +

    Entry’s compression method.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let compressionMethod: CompressionMethod
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + ownerID + +
    +
    +
    +
    +
    +
    +

    ID of entry’s owner.

    + +

    Set from different sources in the following preference order, if possible:

    + +
      +
    1. Info-ZIP New Unix extra field.
    2. +
    3. Info-ZIP Unix extra field.
    4. +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let ownerID: Int?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + groupID + +
    +
    +
    +
    +
    +
    +

    ID of the group of entry’s owner.

    + +

    Set from different sources in the following preference order, if possible:

    + +
      +
    1. Info-ZIP New Unix extra field.
    2. +
    3. Info-ZIP Unix extra field.
    4. +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let groupID: Int?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + customExtraFields + +
    +
    +
    +
    +
    +
    +

    Entry’s custom extra fields from both Central Directory and Local Header.

    +
    +

    Note

    + No particular order of extra fields is guaranteed. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let customExtraFields: [ZipExtraField]
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + crc + +
    +
    +
    +
    +
    +
    +

    CRC32 of entry’s data.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let crc: UInt32
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZlibHeader.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZlibHeader.html new file mode 100644 index 00000000..e3bef053 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZlibHeader.html @@ -0,0 +1,466 @@ + + + + ZlibHeader Structure Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ZlibHeader

+
+
+ +
public struct ZlibHeader
+ +
+
+

Represents the header of a Zlib archive.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + CompressionLevel + +
    +
    +
    +
    +
    +
    +

    Levels of compression which can be used to create Zlib archive.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum CompressionLevel : Int
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + compressionMethod + +
    +
    +
    +
    +
    +
    +

    Compression method of archive. Always .deflate for Zlib archives.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let compressionMethod: CompressionMethod
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + compressionLevel + +
    +
    +
    +
    +
    +
    +

    Level of compression used in archive.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let compressionLevel: CompressionLevel
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + windowSize + +
    +
    +
    +
    +
    +
    +

    Size of ‘window’: moving interval of data which was used to make archive.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let windowSize: Int
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + init(archive:) + +
    +
    +
    +
    +
    +
    +

    Initializes the structure with the values from Zlib archive.

    + +

    If data passed is not actually a Zlib archive, ZlibError will be thrown.

    +
    +

    Throws

    +

    ZlibError. It may indicate that either archive is damaged or it might not be archived with Zlib at all.

    + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(archive data: Data) throws
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + archive + + +
    +

    Data archived with zlib.

    +
    +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZlibHeader/CompressionLevel.html b/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZlibHeader/CompressionLevel.html new file mode 100644 index 00000000..04d62d22 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZlibHeader/CompressionLevel.html @@ -0,0 +1,411 @@ + + + + CompressionLevel Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

CompressionLevel

+
+
+ +
public enum CompressionLevel : Int
+ +
+
+

Levels of compression which can be used to create Zlib archive.

+ + +
+
+ +
+
+
+
    +
  • +
    + + + + fastestAlgorithm + +
    +
    +
    +
    +
    +
    +

    Fastest algorithm.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fastestAlgorithm = 0
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + fastAlgorithm + +
    +
    +
    +
    +
    +
    +

    Fast algorithm.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fastAlgorithm = 1
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + defaultAlgorithm + +
    +
    +
    +
    +
    +
    +

    Default algorithm.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case defaultAlgorithm = 2
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + slowAlgorithm + +
    +
    +
    +
    +
    +
    +

    Slowest algorithm but with maximum compression.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case slowAlgorithm = 3
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/TAR.html b/docsets/SWCompression.docset/Contents/Resources/Documents/TAR.html new file mode 100644 index 00000000..de339a5e --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/TAR.html @@ -0,0 +1,465 @@ + + + + TAR Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

TAR

+ +
+
+ +
+
+
+
    +
  • +
    + + + + TarContainer + +
    +
    +
    +
    +
    +
    +

    Provides functions for work with TAR containers.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class TarContainer : Container
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + TarReader + +
    +
    +
    +
    +
    +
    +

    A type that allows to iteratively read TAR entries from a container provided by a FileHandle.

    + +

    The TarReader may be helpful in reducing the peak memory usage on certain platforms. However, to achieve this either +the TarReader.process(_:) function should be used or both the call to TarReader.read() and the processing of the +returned entry should be wrapped inside the autoreleasepool. Since the autoreleasepool is available only on Darwin +platforms, the memory reducing effect may be not as significant on non-Darwin platforms (such as Linux or Windows).

    + +

    The following code demonstrates an example usage of the TarReader:

    +
       let handle: FileHandle = ...
    +   let reader = TarReader(fileHandle: handle)
    +   try reader.process { ... }
    +   ...
    +   try handle.close()
    +
    + +

    Note that closing the FileHandle remains the responsibility of the caller.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct TarReader
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + TarWriter + +
    +
    +
    +
    +
    +
    +

    A type that allows to iteratively create TAR containers with the output being written into a FileHandle.

    + +

    The TarWriter may be helpful in reducing the peak memory usage on certain platforms. However, to achieve this both +the creation of TAR entries and the calls to TarWriter should be wrapped inside the autoreleasepool. Since the +autoreleasepool is available only on Darwin platforms, the memory reducing effect may be not as significant on +non-Darwin platforms (such as Linux or Windows).

    + +

    The following code demonstrates an example usage of the TarWriter:

    +
       let handle: FileHandle = ...
    +   let writer = TarWriter(fileHandle: handle)
    +   try autoreleasepool {
    +       let entry: TarEntry = ...
    +       try writer.append(entry)
    +   }
    +   try writer.finalize()
    +   try handle.close()
    +
    + +

    Note that TarWriter.finalize() must be called after finishing appending entries to the container. In addition, +closing the FileHandle remains the responsibility of the caller.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct TarWriter
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + TarEntry + +
    +
    +
    +
    +
    +
    +

    Represents an entry from the TAR container.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct TarEntry : ContainerEntry
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + TarEntryInfo + +
    +
    +
    +
    +
    +
    +

    Provides access to information about an entry from the TAR container.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct TarEntryInfo : ContainerEntryInfo
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/ZIP.html b/docsets/SWCompression.docset/Contents/Resources/Documents/ZIP.html new file mode 100644 index 00000000..86ba48bc --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/ZIP.html @@ -0,0 +1,431 @@ + + + + ZIP Reference + + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+

ZIP

+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/badge.svg b/docsets/SWCompression.docset/Contents/Resources/Documents/badge.svg new file mode 100644 index 00000000..a096feca --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/badge.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + documentation + + + documentation + + + 100% + + + 100% + + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/css/highlight.css b/docsets/SWCompression.docset/Contents/Resources/Documents/css/highlight.css new file mode 100644 index 00000000..c170357c --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/css/highlight.css @@ -0,0 +1,202 @@ +/*! Jazzy - https://github.com/realm/jazzy + * Copyright Realm Inc. + * SPDX-License-Identifier: MIT + */ +/* Credit to https://gist.github.com/wataru420/2048287 */ +.highlight .c { + color: #999988; + font-style: italic; } + +.highlight .err { + color: #a61717; + background-color: #e3d2d2; } + +.highlight .k { + color: #000000; + font-weight: bold; } + +.highlight .o { + color: #000000; + font-weight: bold; } + +.highlight .cm { + color: #999988; + font-style: italic; } + +.highlight .cp { + color: #999999; + font-weight: bold; } + +.highlight .c1 { + color: #999988; + font-style: italic; } + +.highlight .cs { + color: #999999; + font-weight: bold; + font-style: italic; } + +.highlight .gd { + color: #000000; + background-color: #ffdddd; } + +.highlight .gd .x { + color: #000000; + background-color: #ffaaaa; } + +.highlight .ge { + color: #000000; + font-style: italic; } + +.highlight .gr { + color: #aa0000; } + +.highlight .gh { + color: #999999; } + +.highlight .gi { + color: #000000; + background-color: #ddffdd; } + +.highlight .gi .x { + color: #000000; + background-color: #aaffaa; } + +.highlight .go { + color: #888888; } + +.highlight .gp { + color: #555555; } + +.highlight .gs { + font-weight: bold; } + +.highlight .gu { + color: #aaaaaa; } + +.highlight .gt { + color: #aa0000; } + +.highlight .kc { + color: #000000; + font-weight: bold; } + +.highlight .kd { + color: #000000; + font-weight: bold; } + +.highlight .kp { + color: #000000; + font-weight: bold; } + +.highlight .kr { + color: #000000; + font-weight: bold; } + +.highlight .kt { + color: #445588; } + +.highlight .m { + color: #009999; } + +.highlight .s { + color: #d14; } + +.highlight .na { + color: #008080; } + +.highlight .nb { + color: #0086B3; } + +.highlight .nc { + color: #445588; + font-weight: bold; } + +.highlight .no { + color: #008080; } + +.highlight .ni { + color: #800080; } + +.highlight .ne { + color: #990000; + font-weight: bold; } + +.highlight .nf { + color: #990000; } + +.highlight .nn { + color: #555555; } + +.highlight .nt { + color: #000080; } + +.highlight .nv { + color: #008080; } + +.highlight .ow { + color: #000000; + font-weight: bold; } + +.highlight .w { + color: #bbbbbb; } + +.highlight .mf { + color: #009999; } + +.highlight .mh { + color: #009999; } + +.highlight .mi { + color: #009999; } + +.highlight .mo { + color: #009999; } + +.highlight .sb { + color: #d14; } + +.highlight .sc { + color: #d14; } + +.highlight .sd { + color: #d14; } + +.highlight .s2 { + color: #d14; } + +.highlight .se { + color: #d14; } + +.highlight .sh { + color: #d14; } + +.highlight .si { + color: #d14; } + +.highlight .sx { + color: #d14; } + +.highlight .sr { + color: #009926; } + +.highlight .s1 { + color: #d14; } + +.highlight .ss { + color: #990073; } + +.highlight .bp { + color: #999999; } + +.highlight .vc { + color: #008080; } + +.highlight .vg { + color: #008080; } + +.highlight .vi { + color: #008080; } + +.highlight .il { + color: #009999; } diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/css/jazzy.css b/docsets/SWCompression.docset/Contents/Resources/Documents/css/jazzy.css new file mode 100644 index 00000000..9d4b08b8 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/css/jazzy.css @@ -0,0 +1,405 @@ +/*! Jazzy - https://github.com/realm/jazzy + * Copyright Realm Inc. + * SPDX-License-Identifier: MIT + */ +*, *:before, *:after { + box-sizing: inherit; } + +body { + margin: 0; + background: #fff; + color: #333; + font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif; + letter-spacing: .2px; + -webkit-font-smoothing: antialiased; + box-sizing: border-box; } + +h1 { + font-size: 2rem; + font-weight: 700; + margin: 1.275em 0 0.6em; } + +h2 { + font-size: 1.75rem; + font-weight: 700; + margin: 1.275em 0 0.3em; } + +h3 { + font-size: 1.5rem; + font-weight: 700; + margin: 1em 0 0.3em; } + +h4 { + font-size: 1.25rem; + font-weight: 700; + margin: 1.275em 0 0.85em; } + +h5 { + font-size: 1rem; + font-weight: 700; + margin: 1.275em 0 0.85em; } + +h6 { + font-size: 1rem; + font-weight: 700; + margin: 1.275em 0 0.85em; + color: #777; } + +p { + margin: 0 0 1em; } + +ul, ol { + padding: 0 0 0 2em; + margin: 0 0 0.85em; } + +blockquote { + margin: 0 0 0.85em; + padding: 0 15px; + color: #858585; + border-left: 4px solid #e5e5e5; } + +img { + max-width: 100%; } + +a { + color: #4183c4; + text-decoration: none; } + a:hover, a:focus { + outline: 0; + text-decoration: underline; } + a.discouraged { + text-decoration: line-through; } + a.discouraged:hover, a.discouraged:focus { + text-decoration: underline line-through; } + +table { + background: #fff; + width: 100%; + border-collapse: collapse; + border-spacing: 0; + overflow: auto; + margin: 0 0 0.85em; } + +tr:nth-child(2n) { + background-color: #fbfbfb; } + +th, td { + padding: 6px 13px; + border: 1px solid #ddd; } + +hr { + height: 1px; + border: none; + background-color: #ddd; } + +pre { + margin: 0 0 1.275em; + padding: .85em 1em; + overflow: auto; + background: #f7f7f7; + font-size: .85em; + font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; } + +code { + font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; } + +.item-container p > code, .item-container li > code, .top-matter p > code, .top-matter li > code { + background: #f7f7f7; + padding: .2em; } + .item-container p > code:before, .item-container p > code:after, .item-container li > code:before, .item-container li > code:after, .top-matter p > code:before, .top-matter p > code:after, .top-matter li > code:before, .top-matter li > code:after { + letter-spacing: -.2em; + content: "\00a0"; } + +pre code { + padding: 0; + white-space: pre; } + +.content-wrapper { + display: flex; + flex-direction: column; } + @media (min-width: 768px) { + .content-wrapper { + flex-direction: row; } } +.header { + display: flex; + padding: 8px; + font-size: 0.875em; + background: #444; + color: #999; } + +.header-col { + margin: 0; + padding: 0 8px; } + +.header-col--primary { + flex: 1; } + +.header-link { + color: #fff; } + +.header-icon { + padding-right: 2px; + vertical-align: -3px; + height: 16px; } + +.breadcrumbs { + font-size: 0.875em; + padding: 8px 16px; + margin: 0; + background: #fbfbfb; + border-bottom: 1px solid #ddd; } + +.carat { + height: 10px; + margin: 0 5px; } + +.navigation { + order: 2; } + @media (min-width: 768px) { + .navigation { + order: 1; + width: 25%; + max-width: 300px; + padding-bottom: 64px; + overflow: hidden; + word-wrap: normal; + background: #fbfbfb; + border-right: 1px solid #ddd; } } +.nav-groups { + list-style-type: none; + padding-left: 0; } + +.nav-group-name { + border-bottom: 1px solid #ddd; + padding: 8px 0 8px 16px; } + +.nav-group-name-link { + color: #333; } + +.nav-group-tasks { + margin: 8px 0; + padding: 0 0 0 8px; } + +.nav-group-task { + font-size: 1em; + list-style-type: none; + white-space: nowrap; } + +.nav-group-task-link { + color: #808080; } + +.main-content { + order: 1; } + @media (min-width: 768px) { + .main-content { + order: 2; + flex: 1; + padding-bottom: 60px; } } +.section { + padding: 0 32px; + border-bottom: 1px solid #ddd; } + +.section-content { + max-width: 834px; + margin: 0 auto; + padding: 16px 0; } + +.section-name { + color: #666; + display: block; } + .section-name p { + margin-bottom: inherit; } + +.declaration .highlight { + overflow-x: initial; + padding: 8px 0; + margin: 0; + background-color: transparent; + border: none; } + +.task-group-section { + border-top: 1px solid #ddd; } + +.task-group { + padding-top: 0px; } + +.task-name-container a[name]:before { + content: ""; + display: block; } + +.section-name-container { + position: relative; } + .section-name-container .section-name-link { + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + margin-bottom: 0; } + .section-name-container .section-name { + position: relative; + pointer-events: none; + z-index: 1; } + .section-name-container .section-name a { + pointer-events: auto; } + +.item-container { + padding: 0; } + +.item { + padding-top: 8px; + width: 100%; + list-style-type: none; } + .item a[name]:before { + content: ""; + display: block; } + .item .token, .item .direct-link { + display: inline-block; + text-indent: -20px; + padding-left: 3px; + margin-left: 20px; + font-size: 1rem; } + +.declaration-note { + font-size: .85em; + color: #808080; + font-style: italic; } + +.pointer-container { + border-bottom: 1px solid #ddd; + left: -23px; + padding-bottom: 13px; + position: relative; + width: 110%; } + +.pointer { + left: 21px; + top: 7px; + display: block; + position: absolute; + width: 12px; + height: 12px; + border-left: 1px solid #ddd; + border-top: 1px solid #ddd; + background: #fff; + transform: rotate(45deg); } + +.height-container { + display: none; + position: relative; + width: 100%; + overflow: hidden; } + .height-container .section { + background: #fff; + border: 1px solid #ddd; + border-top-width: 0; + padding-top: 10px; + padding-bottom: 5px; + padding: 8px 16px; } + +.aside, .language { + padding: 6px 12px; + margin: 12px 0; + border-left: 5px solid #dddddd; + overflow-y: hidden; } + .aside .aside-title, .language .aside-title { + font-size: 9px; + letter-spacing: 2px; + text-transform: uppercase; + padding-bottom: 0; + margin: 0; + color: #aaa; + -webkit-user-select: none; } + .aside p:last-child, .language p:last-child { + margin-bottom: 0; } + +.language { + border-left: 5px solid #cde9f4; } + .language .aside-title { + color: #4183c4; } + +.aside-warning, .aside-deprecated, .aside-unavailable { + border-left: 5px solid #ff6666; } + .aside-warning .aside-title, .aside-deprecated .aside-title, .aside-unavailable .aside-title { + color: #ff0000; } + +.graybox { + border-collapse: collapse; + width: 100%; } + .graybox p { + margin: 0; + word-break: break-word; + min-width: 50px; } + .graybox td { + border: 1px solid #ddd; + padding: 5px 25px 5px 10px; + vertical-align: middle; } + .graybox tr td:first-of-type { + text-align: right; + padding: 7px; + vertical-align: top; + word-break: normal; + width: 40px; } + +.slightly-smaller { + font-size: 0.9em; } + +.footer { + padding: 8px 16px; + background: #444; + color: #ddd; + font-size: 0.8em; } + .footer p { + margin: 8px 0; } + .footer a { + color: #fff; } + +html.dash .header, html.dash .breadcrumbs, html.dash .navigation { + display: none; } + +html.dash .height-container { + display: block; } + +form[role=search] input { + font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 24px; + padding: 0 10px; + margin: 0; + border: none; + border-radius: 1em; } + .loading form[role=search] input { + background: white url(../img/spinner.gif) center right 4px no-repeat; } + +form[role=search] .tt-menu { + margin: 0; + min-width: 300px; + background: #fbfbfb; + color: #333; + border: 1px solid #ddd; } + +form[role=search] .tt-highlight { + font-weight: bold; } + +form[role=search] .tt-suggestion { + font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif; + padding: 0 8px; } + form[role=search] .tt-suggestion span { + display: table-cell; + white-space: nowrap; } + form[role=search] .tt-suggestion .doc-parent-name { + width: 100%; + text-align: right; + font-weight: normal; + font-size: 0.9em; + padding-left: 16px; } + +form[role=search] .tt-suggestion:hover, +form[role=search] .tt-suggestion.tt-cursor { + cursor: pointer; + background-color: #4183c4; + color: #fff; } + +form[role=search] .tt-suggestion:hover .doc-parent-name, +form[role=search] .tt-suggestion.tt-cursor .doc-parent-name { + color: #fff; } diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/img/carat.png b/docsets/SWCompression.docset/Contents/Resources/Documents/img/carat.png new file mode 100755 index 0000000000000000000000000000000000000000..29d2f7fd4955fca6bc6fb740e0373a2c358c398e GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRo!3HEV4DF?Wlw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6JlqAi{-jv*Ddl5#RKJQ5NTUZgiPI4RUKGIKU?u8L&ndhX1t za+0CMVUnT(Gnb}ei=c~x==tMH^F1_tBocXwcoSWoO-SZY-o>!8%^=Bms)(~h;m_U( zXNixk28L}0LS5-jKyq@#2gyS|J&f#pGCLkTc<@2s1dqeyqJ*Rc0tSIETAgmODY;(s z2y|Mcp&2}7rpBprBBB~1qM1`N+}4SoxYVPqsXi&l`rxZp{(w0iSy$Nv5*Vy!RapG^ S^0y4=eg;ohKbLh*2~7a!Pg}VF literal 0 HcmV?d00001 diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/img/dash.png b/docsets/SWCompression.docset/Contents/Resources/Documents/img/dash.png new file mode 100755 index 0000000000000000000000000000000000000000..6f694c7a012b417908da3687a0a39aa182e91c74 GIT binary patch literal 1338 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 literal 0 HcmV?d00001 diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/index.html b/docsets/SWCompression.docset/Contents/Resources/Documents/index.html new file mode 100644 index 00000000..ba2637dd --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/index.html @@ -0,0 +1,492 @@ + + + + SWCompression Reference + + + + + + + + + + + + + + + +
+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+ +

SWCompression

+ +

Swift 5.9+ +GitHub license +Build Status

+ +

A framework with (de)compression algorithms and functions for working with various archives and containers.

+

What is this?

+ +

SWCompression is a framework with a collection of functions for:

+ +
    +
  1. Decompression (and sometimes compression) using different algorithms.
  2. +
  3. Reading (and sometimes writing) archives of different formats.
  4. +
  5. Reading (and sometimes writing) containers such as ZIP, TAR and 7-Zip.
  6. +
+ +

It also works on Apple platforms, Linux, and Windows.

+ +

All features are listed in the tables below. “TBD” means that feature is planned but not implemented (yet).

+ + + + + + + + + + + + + + + + + + + + + + + + +
DeflateBZip2LZMA/LZMA2LZ4
Decompression
CompressionTBD
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ZlibGZipXZZIPTAR7-Zip
Read
WriteTBDTBDTBD
+ +

Also, SWCompression is written with Swift only.

+

Installation

+ +

SWCompression can be integrated into your project using Swift Package Manager.

+ +

Note: SWCompression versions 4.8.6 and earlier were also made available via CocoaPods or Carthage.

+ +

To install with Swift Package manager, add SWCompression to you package dependencies and specify it as a dependency for +your target, e.g.:

+
import PackageDescription
+
+let package = Package(
+    name: "PackageName",
+    dependencies: [
+        .package(name: "SWCompression", url: "https://github.com/tsolomko/SWCompression.git",
+                 from: "4.9.0")
+    ],
+    targets: [
+        .target(
+            name: "TargetName",
+            dependencies: ["SWCompression"]
+        )
+    ]
+)
+
+ +

More details you can find in Swift Package Manager’s Documentation.

+

Usage

+

Basic Example

+ +

For example, if you want to decompress “deflated” data just use:

+
// let data = <Your compressed data>
+let decompressedData = try? Deflate.decompress(data: data)
+
+ +

However, it is unlikely that you will encounter deflated data outside of any archive. So, in the case of GZip archive +you should use:

+
let decompressedData = try? GzipArchive.unarchive(archive: data)
+
+

Handling Errors

+ +

Most SWCompression functions can throw errors and you are responsible for handling them. If you look at the list of +available error types and their cases, you may be frightened by their number. However, most of the cases (such as +XZError.wrongMagic) exist for diagnostic purposes.

+ +

Thus, you only need to handle the most common type of error for your archive/algorithm. For example:

+
do {
+    // let data = <Your compressed data>
+    let decompressedData = try XZArchive.unarchive(archive: data)
+} catch let error as XZError {
+    // <handle XZ related error here>
+} catch let error {
+    // <handle all other errors here>
+}
+
+

Documentation

+ +

Every function or type of SWCompression’s public API is documented. This documentation can be found at its own +website or via a slightly shorter link: +swcompression.tsolomko.me

+

Sophisticated example

+ +

There is a small command-line program, “swcomp”, which is included in this repository in “Sources/swcomp”. It can be +built using Swift Package Manager (only available on macOS).

+ +

IMPORTANT: The “swcomp” command-line tool is NOT intended for general use.

+

Contributing

+ +

Whether you find a bug, have a suggestion, idea, feedback or something else, please +create an issue on GitHub. If you have any questions, you can ask +them on the Discussions page.

+ +

In the case of a bug, it will be especially helpful if you attach a file (archive, etc.) that caused the bug to occur.

+ +

If you’d like to contribute, please create a pull request on GitHub.

+

Executing tests locally

+ +

If you want to run tests on your computer, you need to do a couple of additional steps after cloning the repository:

+
git submodule update --init --recursive
+cd "Tests/Test Files"
+cp gitattributes-copy .gitattributes
+git lfs pull
+git lfs checkout
+
+ +

These commands will download the files used in tests which are stored in a +separate repository using Git LFS. There are two reasons for +this complicated setup. Firstly, some of these files can be quite big, and it would be unfortunate if the users of +SWCompression had to download them during the installation. Secondly, Swift Package Manager and contemporary versions of +Xcode don’t always work well with git-lfs-enabled repositories. To prevent any potential problems test files were moved +into another repository.

+ +

Please note, that if you want to add a new type of test files, in addition to running git lfs track, you have to +also copy into the “Tests/Test Files/gitattributes-copy” file a line this command adds to the “Tests/Test Files/.gitattributes” +file. Do not commit the “.gitattributes” file to the git history. It is git-ignored for a reason!

+ +

Please also be mindful of Git LFS bandwidth quota on GitHub: try to limit downloading lfs’d files using git lfs pull. +In CI we use some caching techniques to help with the quota, so if you’re going to add new tests that require several +new test files you should try to submit them all together to reduce the amount of times CI needs to recreate the cache +(recreating the cache requires to do git lfs pull for all test files).

+

Performance

+ +

Using whole module optimizations is recommended for the best performance. They are enabled by default in the Release build +configuration.

+ +

Tests Results document contains results of benchmarking of various functions.

+

Why?

+ +

First of all, existing solutions for working with compression, archives and containers have certain disadvantages. They +might not support a particular compression algorithm or archive format and they all have different APIs, which sometimes +can be slightly confusing for users, especially when you mix different libraries in one project. This project attempts to +provide missing (and sometimes existing) functionality through the unified API which is easy to use and remember.

+ +

Secondly, in some cases it may be important to have a compression framework written entirely in Swift, without relying +on either system libraries or solutions implemented in other languages. Additionaly, since SWCompression is written +completely in Swift without Objective-C, it can also be used on Linux, and Windows.

+

Future plans

+ +
    +
  • Performance…
  • +
  • Better Deflate compression.
  • +
  • Something else…
  • +
+

License

+ +

MIT licensed

+

References

+ + + +
+
+ + +
+
+ + + diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/js/jazzy.js b/docsets/SWCompression.docset/Contents/Resources/Documents/js/jazzy.js new file mode 100755 index 00000000..1ac86992 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/js/jazzy.js @@ -0,0 +1,74 @@ +// Jazzy - https://github.com/realm/jazzy +// Copyright Realm Inc. +// SPDX-License-Identifier: MIT + +window.jazzy = {'docset': false} +if (typeof window.dash != 'undefined') { + document.documentElement.className += ' dash' + window.jazzy.docset = true +} +if (navigator.userAgent.match(/xcode/i)) { + document.documentElement.className += ' xcode' + window.jazzy.docset = true +} + +function toggleItem($link, $content) { + var animationDuration = 300; + $link.toggleClass('token-open'); + $content.slideToggle(animationDuration); +} + +function itemLinkToContent($link) { + return $link.parent().parent().next(); +} + +// On doc load + hash-change, open any targeted item +function openCurrentItemIfClosed() { + if (window.jazzy.docset) { + return; + } + var $link = $(`a[name="${location.hash.substring(1)}"]`).nextAll('.token'); + $content = itemLinkToContent($link); + if ($content.is(':hidden')) { + toggleItem($link, $content); + } +} + +$(openCurrentItemIfClosed); +$(window).on('hashchange', openCurrentItemIfClosed); + +// On item link ('token') click, toggle its discussion +$('.token').on('click', function(event) { + if (window.jazzy.docset) { + return; + } + var $link = $(this); + toggleItem($link, itemLinkToContent($link)); + + // Keeps the document from jumping to the hash. + var href = $link.attr('href'); + if (history.pushState) { + history.pushState({}, '', href); + } else { + location.hash = href; + } + event.preventDefault(); +}); + +// Clicks on links to the current, closed, item need to open the item +$("a:not('.token')").on('click', function() { + if (location == this.href) { + openCurrentItemIfClosed(); + } +}); + +// KaTeX rendering +if ("katex" in window) { + $($('.math').each( (_, element) => { + katex.render(element.textContent, element, { + displayMode: $(element).hasClass('m-block'), + throwOnError: false, + trust: true + }); + })) +} diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/js/jazzy.search.js b/docsets/SWCompression.docset/Contents/Resources/Documents/js/jazzy.search.js new file mode 100644 index 00000000..359cdbb8 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/js/jazzy.search.js @@ -0,0 +1,74 @@ +// Jazzy - https://github.com/realm/jazzy +// Copyright Realm Inc. +// SPDX-License-Identifier: MIT + +$(function(){ + var $typeahead = $('[data-typeahead]'); + var $form = $typeahead.parents('form'); + var searchURL = $form.attr('action'); + + function displayTemplate(result) { + return result.name; + } + + function suggestionTemplate(result) { + var t = '
'; + t += '' + result.name + ''; + if (result.parent_name) { + t += '' + result.parent_name + ''; + } + t += '
'; + return t; + } + + $typeahead.one('focus', function() { + $form.addClass('loading'); + + $.getJSON(searchURL).then(function(searchData) { + const searchIndex = lunr(function() { + this.ref('url'); + this.field('name'); + this.field('abstract'); + for (const [url, doc] of Object.entries(searchData)) { + this.add({url: url, name: doc.name, abstract: doc.abstract}); + } + }); + + $typeahead.typeahead( + { + highlight: true, + minLength: 3, + autoselect: true + }, + { + limit: 10, + display: displayTemplate, + templates: { suggestion: suggestionTemplate }, + source: function(query, sync) { + const lcSearch = query.toLowerCase(); + const results = searchIndex.query(function(q) { + q.term(lcSearch, { boost: 100 }); + q.term(lcSearch, { + boost: 10, + wildcard: lunr.Query.wildcard.TRAILING + }); + }).map(function(result) { + var doc = searchData[result.ref]; + doc.url = result.ref; + return doc; + }); + sync(results); + } + } + ); + $form.removeClass('loading'); + $typeahead.trigger('focus'); + }); + }); + + var baseURL = searchURL.slice(0, -"search.json".length); + + $typeahead.on('typeahead:select', function(e, result) { + window.location = baseURL + result.url; + }); +}); diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/js/jquery.min.js b/docsets/SWCompression.docset/Contents/Resources/Documents/js/jquery.min.js new file mode 100644 index 00000000..7f37b5d9 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/js/jquery.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="",le.option=!!xe.lastChild;var ke={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n",""]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="
",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 00){var c=e.utils.clone(r)||{};c.position=[a,l],c.index=s.length,s.push(new e.Token(i.slice(a,o),c))}a=o+1}}return s},e.tokenizer.separator=/[\s\-]+/,e.Pipeline=function(){this._stack=[]},e.Pipeline.registeredFunctions=Object.create(null),e.Pipeline.registerFunction=function(t,r){r in this.registeredFunctions&&e.utils.warn("Overwriting existing registered function: "+r),t.label=r,e.Pipeline.registeredFunctions[t.label]=t},e.Pipeline.warnIfFunctionNotRegistered=function(t){var r=t.label&&t.label in this.registeredFunctions;r||e.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",t)},e.Pipeline.load=function(t){var r=new e.Pipeline;return t.forEach(function(t){var i=e.Pipeline.registeredFunctions[t];if(!i)throw new Error("Cannot load unregistered function: "+t);r.add(i)}),r},e.Pipeline.prototype.add=function(){var t=Array.prototype.slice.call(arguments);t.forEach(function(t){e.Pipeline.warnIfFunctionNotRegistered(t),this._stack.push(t)},this)},e.Pipeline.prototype.after=function(t,r){e.Pipeline.warnIfFunctionNotRegistered(r);var i=this._stack.indexOf(t);if(i==-1)throw new Error("Cannot find existingFn");i+=1,this._stack.splice(i,0,r)},e.Pipeline.prototype.before=function(t,r){e.Pipeline.warnIfFunctionNotRegistered(r);var i=this._stack.indexOf(t);if(i==-1)throw new Error("Cannot find existingFn");this._stack.splice(i,0,r)},e.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);t!=-1&&this._stack.splice(t,1)},e.Pipeline.prototype.run=function(e){for(var t=this._stack.length,r=0;r1&&(se&&(r=n),s!=e);)i=r-t,n=t+Math.floor(i/2),s=this.elements[2*n];return s==e?2*n:s>e?2*n:sa?l+=2:o==a&&(t+=r[u+1]*i[l+1],u+=2,l+=2);return t},e.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},e.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,r=0;t0){var o,a=s.str.charAt(0);a in s.node.edges?o=s.node.edges[a]:(o=new e.TokenSet,s.node.edges[a]=o),1==s.str.length&&(o["final"]=!0),n.push({node:o,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(0!=s.editsRemaining){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new e.TokenSet;s.node.edges["*"]=u}if(0==s.str.length&&(u["final"]=!0),n.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&n.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),1==s.str.length&&(s.node["final"]=!0),s.str.length>=1){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new e.TokenSet;s.node.edges["*"]=l}1==s.str.length&&(l["final"]=!0),n.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var c,h=s.str.charAt(0),d=s.str.charAt(1);d in s.node.edges?c=s.node.edges[d]:(c=new e.TokenSet,s.node.edges[d]=c),1==s.str.length&&(c["final"]=!0),n.push({node:c,editsRemaining:s.editsRemaining-1,str:h+s.str.slice(2)})}}}return i},e.TokenSet.fromString=function(t){for(var r=new e.TokenSet,i=r,n=0,s=t.length;n=e;t--){var r=this.uncheckedNodes[t],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r["char"]]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}},e.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},e.Index.prototype.search=function(t){return this.query(function(r){var i=new e.QueryParser(t,r);i.parse()})},e.Index.prototype.query=function(t){for(var r=new e.Query(this.fields),i=Object.create(null),n=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),u=0;u1?this._b=1:this._b=e},e.Builder.prototype.k1=function(e){this._k1=e},e.Builder.prototype.add=function(t,r){var i=t[this._ref],n=Object.keys(this._fields);this._documents[i]=r||{},this.documentCount+=1;for(var s=0;s=this.length)return e.QueryLexer.EOS;var t=this.str.charAt(this.pos);return this.pos+=1,t},e.QueryLexer.prototype.width=function(){return this.pos-this.start},e.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},e.QueryLexer.prototype.backup=function(){this.pos-=1},e.QueryLexer.prototype.acceptDigitRun=function(){var t,r;do t=this.next(),r=t.charCodeAt(0);while(r>47&&r<58);t!=e.QueryLexer.EOS&&this.backup()},e.QueryLexer.prototype.more=function(){return this.pos1&&(t.backup(),t.emit(e.QueryLexer.TERM)),t.ignore(),t.more())return e.QueryLexer.lexText},e.QueryLexer.lexEditDistance=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.EDIT_DISTANCE),e.QueryLexer.lexText},e.QueryLexer.lexBoost=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.BOOST),e.QueryLexer.lexText},e.QueryLexer.lexEOS=function(t){t.width()>0&&t.emit(e.QueryLexer.TERM)},e.QueryLexer.termSeparator=e.tokenizer.separator,e.QueryLexer.lexText=function(t){for(;;){var r=t.next();if(r==e.QueryLexer.EOS)return e.QueryLexer.lexEOS;if(92!=r.charCodeAt(0)){if(":"==r)return e.QueryLexer.lexField;if("~"==r)return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexEditDistance;if("^"==r)return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexBoost;if("+"==r&&1===t.width())return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if("-"==r&&1===t.width())return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if(r.match(e.QueryLexer.termSeparator))return e.QueryLexer.lexTerm}else t.escapeCharacter()}},e.QueryParser=function(t,r){this.lexer=new e.QueryLexer(t),this.query=r,this.currentClause={},this.lexemeIdx=0},e.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var t=e.QueryParser.parseClause;t;)t=t(this);return this.query},e.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},e.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},e.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},e.QueryParser.parseClause=function(t){var r=t.peekLexeme();if(void 0!=r)switch(r.type){case e.QueryLexer.PRESENCE:return e.QueryParser.parsePresence;case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var i="expected either a field or a term, found "+r.type;throw r.str.length>=1&&(i+=" with value '"+r.str+"'"),new e.QueryParseError(i,r.start,r.end)}},e.QueryParser.parsePresence=function(t){var r=t.consumeLexeme();if(void 0!=r){switch(r.str){case"-":t.currentClause.presence=e.Query.presence.PROHIBITED;break;case"+":t.currentClause.presence=e.Query.presence.REQUIRED;break;default:var i="unrecognised presence operator'"+r.str+"'";throw new e.QueryParseError(i,r.start,r.end)}var n=t.peekLexeme();if(void 0==n){var i="expecting term or field, found nothing";throw new e.QueryParseError(i,r.start,r.end)}switch(n.type){case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var i="expecting term or field, found '"+n.type+"'";throw new e.QueryParseError(i,n.start,n.end)}}},e.QueryParser.parseField=function(t){var r=t.consumeLexeme();if(void 0!=r){if(t.query.allFields.indexOf(r.str)==-1){var i=t.query.allFields.map(function(e){return"'"+e+"'"}).join(", "),n="unrecognised field '"+r.str+"', possible fields: "+i;throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.fields=[r.str];var s=t.peekLexeme();if(void 0==s){var n="expecting term, found nothing";throw new e.QueryParseError(n,r.start,r.end)}switch(s.type){case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var n="expecting term, found '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},e.QueryParser.parseTerm=function(t){var r=t.consumeLexeme();if(void 0!=r){t.currentClause.term=r.str.toLowerCase(),r.str.indexOf("*")!=-1&&(t.currentClause.usePipeline=!1);var i=t.peekLexeme();if(void 0==i)return void t.nextClause();switch(i.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+i.type+"'";throw new e.QueryParseError(n,i.start,i.end)}}},e.QueryParser.parseEditDistance=function(t){var r=t.consumeLexeme();if(void 0!=r){var i=parseInt(r.str,10);if(isNaN(i)){var n="edit distance must be numeric";throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.editDistance=i;var s=t.peekLexeme();if(void 0==s)return void t.nextClause();switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},e.QueryParser.parseBoost=function(t){var r=t.consumeLexeme();if(void 0!=r){var i=parseInt(r.str,10);if(isNaN(i)){var n="boost must be numeric";throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.boost=i;var s=t.peekLexeme();if(void 0==s)return void t.nextClause();switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():e.lunr=t()}(this,function(){return e})}(); diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/js/typeahead.jquery.js b/docsets/SWCompression.docset/Contents/Resources/Documents/js/typeahead.jquery.js new file mode 100644 index 00000000..bcb734be --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/js/typeahead.jquery.js @@ -0,0 +1,1695 @@ +/*! + * typeahead.js 1.3.3 + * https://github.com/corejavascript/typeahead.js + * Copyright 2013-2024 Twitter, Inc. and other contributors; Licensed MIT + */ + + +(function(root, factory) { + if (typeof define === "function" && define.amd) { + define([ "jquery" ], function(a0) { + return factory(a0); + }); + } else if (typeof module === "object" && module.exports) { + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +})(this, function($) { + var _ = function() { + "use strict"; + return { + isMsie: function() { + return /(msie|trident)/i.test(navigator.userAgent) ? navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2] : false; + }, + isBlankString: function(str) { + return !str || /^\s*$/.test(str); + }, + escapeRegExChars: function(str) { + return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); + }, + isString: function(obj) { + return typeof obj === "string"; + }, + isNumber: function(obj) { + return typeof obj === "number"; + }, + isArray: $.isArray, + isFunction: $.isFunction, + isObject: $.isPlainObject, + isUndefined: function(obj) { + return typeof obj === "undefined"; + }, + isElement: function(obj) { + return !!(obj && obj.nodeType === 1); + }, + isJQuery: function(obj) { + return obj instanceof $; + }, + toStr: function toStr(s) { + return _.isUndefined(s) || s === null ? "" : s + ""; + }, + bind: $.proxy, + each: function(collection, cb) { + $.each(collection, reverseArgs); + function reverseArgs(index, value) { + return cb(value, index); + } + }, + map: $.map, + filter: $.grep, + every: function(obj, test) { + var result = true; + if (!obj) { + return result; + } + $.each(obj, function(key, val) { + if (!(result = test.call(null, val, key, obj))) { + return false; + } + }); + return !!result; + }, + some: function(obj, test) { + var result = false; + if (!obj) { + return result; + } + $.each(obj, function(key, val) { + if (result = test.call(null, val, key, obj)) { + return false; + } + }); + return !!result; + }, + mixin: $.extend, + identity: function(x) { + return x; + }, + clone: function(obj) { + return $.extend(true, {}, obj); + }, + getIdGenerator: function() { + var counter = 0; + return function() { + return counter++; + }; + }, + templatify: function templatify(obj) { + return $.isFunction(obj) ? obj : template; + function template() { + return String(obj); + } + }, + defer: function(fn) { + setTimeout(fn, 0); + }, + debounce: function(func, wait, immediate) { + var timeout, result; + return function() { + var context = this, args = arguments, later, callNow; + later = function() { + timeout = null; + if (!immediate) { + result = func.apply(context, args); + } + }; + callNow = immediate && !timeout; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + if (callNow) { + result = func.apply(context, args); + } + return result; + }; + }, + throttle: function(func, wait) { + var context, args, timeout, result, previous, later; + previous = 0; + later = function() { + previous = new Date(); + timeout = null; + result = func.apply(context, args); + }; + return function() { + var now = new Date(), remaining = wait - (now - previous); + context = this; + args = arguments; + if (remaining <= 0) { + clearTimeout(timeout); + timeout = null; + previous = now; + result = func.apply(context, args); + } else if (!timeout) { + timeout = setTimeout(later, remaining); + } + return result; + }; + }, + stringify: function(val) { + return _.isString(val) ? val : JSON.stringify(val); + }, + guid: function() { + function _p8(s) { + var p = (Math.random().toString(16) + "000000000").substr(2, 8); + return s ? "-" + p.substr(0, 4) + "-" + p.substr(4, 4) : p; + } + return "tt-" + _p8() + _p8(true) + _p8(true) + _p8(); + }, + noop: function() {} + }; + }(); + var WWW = function() { + "use strict"; + var defaultClassNames = { + wrapper: "twitter-typeahead", + input: "tt-input", + hint: "tt-hint", + menu: "tt-menu", + dataset: "tt-dataset", + suggestion: "tt-suggestion", + selectable: "tt-selectable", + empty: "tt-empty", + open: "tt-open", + cursor: "tt-cursor", + highlight: "tt-highlight" + }; + return build; + function build(o) { + var www, classes; + classes = _.mixin({}, defaultClassNames, o); + www = { + css: buildCss(), + classes: classes, + html: buildHtml(classes), + selectors: buildSelectors(classes) + }; + return { + css: www.css, + html: www.html, + classes: www.classes, + selectors: www.selectors, + mixin: function(o) { + _.mixin(o, www); + } + }; + } + function buildHtml(c) { + return { + wrapper: '', + menu: '
' + }; + } + function buildSelectors(classes) { + var selectors = {}; + _.each(classes, function(v, k) { + selectors[k] = "." + v; + }); + return selectors; + } + function buildCss() { + var css = { + wrapper: { + position: "relative", + display: "inline-block" + }, + hint: { + position: "absolute", + top: "0", + left: "0", + borderColor: "transparent", + boxShadow: "none", + opacity: "1" + }, + input: { + position: "relative", + verticalAlign: "top", + backgroundColor: "transparent" + }, + inputWithNoHint: { + position: "relative", + verticalAlign: "top" + }, + menu: { + position: "absolute", + top: "100%", + left: "0", + zIndex: "100", + display: "none" + }, + ltr: { + left: "0", + right: "auto" + }, + rtl: { + left: "auto", + right: " 0" + } + }; + if (_.isMsie()) { + _.mixin(css.input, { + backgroundImage: "url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)" + }); + } + return css; + } + }(); + var EventBus = function() { + "use strict"; + var namespace, deprecationMap; + namespace = "typeahead:"; + deprecationMap = { + render: "rendered", + cursorchange: "cursorchanged", + select: "selected", + autocomplete: "autocompleted" + }; + function EventBus(o) { + if (!o || !o.el) { + $.error("EventBus initialized without el"); + } + this.$el = $(o.el); + } + _.mixin(EventBus.prototype, { + _trigger: function(type, args) { + var $e = $.Event(namespace + type); + this.$el.trigger.call(this.$el, $e, args || []); + return $e; + }, + before: function(type) { + var args, $e; + args = [].slice.call(arguments, 1); + $e = this._trigger("before" + type, args); + return $e.isDefaultPrevented(); + }, + trigger: function(type) { + var deprecatedType; + this._trigger(type, [].slice.call(arguments, 1)); + if (deprecatedType = deprecationMap[type]) { + this._trigger(deprecatedType, [].slice.call(arguments, 1)); + } + } + }); + return EventBus; + }(); + var EventEmitter = function() { + "use strict"; + var splitter = /\s+/, nextTick = getNextTick(); + return { + onSync: onSync, + onAsync: onAsync, + off: off, + trigger: trigger + }; + function on(method, types, cb, context) { + var type; + if (!cb) { + return this; + } + types = types.split(splitter); + cb = context ? bindContext(cb, context) : cb; + this._callbacks = this._callbacks || {}; + while (type = types.shift()) { + this._callbacks[type] = this._callbacks[type] || { + sync: [], + async: [] + }; + this._callbacks[type][method].push(cb); + } + return this; + } + function onAsync(types, cb, context) { + return on.call(this, "async", types, cb, context); + } + function onSync(types, cb, context) { + return on.call(this, "sync", types, cb, context); + } + function off(types) { + var type; + if (!this._callbacks) { + return this; + } + types = types.split(splitter); + while (type = types.shift()) { + delete this._callbacks[type]; + } + return this; + } + function trigger(types) { + var type, callbacks, args, syncFlush, asyncFlush; + if (!this._callbacks) { + return this; + } + types = types.split(splitter); + args = [].slice.call(arguments, 1); + while ((type = types.shift()) && (callbacks = this._callbacks[type])) { + syncFlush = getFlush(callbacks.sync, this, [ type ].concat(args)); + asyncFlush = getFlush(callbacks.async, this, [ type ].concat(args)); + syncFlush() && nextTick(asyncFlush); + } + return this; + } + function getFlush(callbacks, context, args) { + return flush; + function flush() { + var cancelled; + for (var i = 0, len = callbacks.length; !cancelled && i < len; i += 1) { + cancelled = callbacks[i].apply(context, args) === false; + } + return !cancelled; + } + } + function getNextTick() { + var nextTickFn; + if (window.setImmediate) { + nextTickFn = function nextTickSetImmediate(fn) { + setImmediate(function() { + fn(); + }); + }; + } else { + nextTickFn = function nextTickSetTimeout(fn) { + setTimeout(function() { + fn(); + }, 0); + }; + } + return nextTickFn; + } + function bindContext(fn, context) { + return fn.bind ? fn.bind(context) : function() { + fn.apply(context, [].slice.call(arguments, 0)); + }; + } + }(); + var highlight = function(doc) { + "use strict"; + var defaults = { + node: null, + pattern: null, + tagName: "strong", + className: null, + wordsOnly: false, + caseSensitive: false, + diacriticInsensitive: false + }; + var accented = { + A: "[AaªÀ-Åà-åĀ-ąǍǎȀ-ȃȦȧᴬᵃḀḁẚẠ-ảₐ℀℁℻⒜Ⓐⓐ㍱-㍴㎀-㎄㎈㎉㎩-㎯㏂㏊㏟㏿Aa]", + B: "[BbᴮᵇḂ-ḇℬ⒝Ⓑⓑ㍴㎅-㎇㏃㏈㏔㏝Bb]", + C: "[CcÇçĆ-čᶜ℀ℂ℃℅℆ℭⅭⅽ⒞Ⓒⓒ㍶㎈㎉㎝㎠㎤㏄-㏇Cc]", + D: "[DdĎďDŽ-džDZ-dzᴰᵈḊ-ḓⅅⅆⅮⅾ⒟Ⓓⓓ㋏㍲㍷-㍹㎗㎭-㎯㏅㏈Dd]", + E: "[EeÈ-Ëè-ëĒ-ěȄ-ȇȨȩᴱᵉḘ-ḛẸ-ẽₑ℡ℯℰⅇ⒠Ⓔⓔ㉐㋍㋎Ee]", + F: "[FfᶠḞḟ℉ℱ℻⒡Ⓕⓕ㎊-㎌㎙ff-fflFf]", + G: "[GgĜ-ģǦǧǴǵᴳᵍḠḡℊ⒢Ⓖⓖ㋌㋍㎇㎍-㎏㎓㎬㏆㏉㏒㏿Gg]", + H: "[HhĤĥȞȟʰᴴḢ-ḫẖℋ-ℎ⒣Ⓗⓗ㋌㍱㎐-㎔㏊㏋㏗Hh]", + I: "[IiÌ-Ïì-ïĨ-İIJijǏǐȈ-ȋᴵᵢḬḭỈ-ịⁱℐℑℹⅈⅠ-ⅣⅥ-ⅨⅪⅫⅰ-ⅳⅵ-ⅸⅺⅻ⒤Ⓘⓘ㍺㏌㏕fiffiIi]", + J: "[JjIJ-ĵLJ-njǰʲᴶⅉ⒥ⒿⓙⱼJj]", + K: "[KkĶķǨǩᴷᵏḰ-ḵK⒦Ⓚⓚ㎄㎅㎉㎏㎑㎘㎞㎢㎦㎪㎸㎾㏀㏆㏍-㏏Kk]", + L: "[LlĹ-ŀLJ-ljˡᴸḶḷḺ-ḽℒℓ℡Ⅼⅼ⒧Ⓛⓛ㋏㎈㎉㏐-㏓㏕㏖㏿flfflLl]", + M: "[MmᴹᵐḾ-ṃ℠™ℳⅯⅿ⒨Ⓜⓜ㍷-㍹㎃㎆㎎㎒㎖㎙-㎨㎫㎳㎷㎹㎽㎿㏁㏂㏎㏐㏔-㏖㏘㏙㏞㏟Mm]", + N: "[NnÑñŃ-ʼnNJ-njǸǹᴺṄ-ṋⁿℕ№⒩Ⓝⓝ㎁㎋㎚㎱㎵㎻㏌㏑Nn]", + O: "[OoºÒ-Öò-öŌ-őƠơǑǒǪǫȌ-ȏȮȯᴼᵒỌ-ỏₒ℅№ℴ⒪Ⓞⓞ㍵㏇㏒㏖Oo]", + P: "[PpᴾᵖṔ-ṗℙ⒫Ⓟⓟ㉐㍱㍶㎀㎊㎩-㎬㎰㎴㎺㏋㏗-㏚Pp]", + Q: "[Qqℚ⒬Ⓠⓠ㏃Qq]", + R: "[RrŔ-řȐ-ȓʳᴿᵣṘ-ṛṞṟ₨ℛ-ℝ⒭Ⓡⓡ㋍㍴㎭-㎯㏚㏛Rr]", + S: "[SsŚ-šſȘșˢṠ-ṣ₨℁℠⒮Ⓢⓢ㎧㎨㎮-㎳㏛㏜stSs]", + T: "[TtŢ-ťȚțᵀᵗṪ-ṱẗ℡™⒯Ⓣⓣ㉐㋏㎔㏏ſtstTt]", + U: "[UuÙ-Üù-üŨ-ųƯưǓǔȔ-ȗᵁᵘᵤṲ-ṷỤ-ủ℆⒰Ⓤⓤ㍳㍺Uu]", + V: "[VvᵛᵥṼ-ṿⅣ-Ⅷⅳ-ⅷ⒱Ⓥⓥⱽ㋎㍵㎴-㎹㏜㏞Vv]", + W: "[WwŴŵʷᵂẀ-ẉẘ⒲Ⓦⓦ㎺-㎿㏝Ww]", + X: "[XxˣẊ-ẍₓ℻Ⅸ-Ⅻⅸ-ⅻ⒳Ⓧⓧ㏓Xx]", + Y: "[YyÝýÿŶ-ŸȲȳʸẎẏẙỲ-ỹ⒴Ⓨⓨ㏉Yy]", + Z: "[ZzŹ-žDZ-dzᶻẐ-ẕℤℨ⒵Ⓩⓩ㎐-㎔Zz]" + }; + return function hightlight(o) { + var regex; + o = _.mixin({}, defaults, o); + if (!o.node || !o.pattern) { + return; + } + o.pattern = _.isArray(o.pattern) ? o.pattern : [ o.pattern ]; + regex = getRegex(o.pattern, o.caseSensitive, o.wordsOnly, o.diacriticInsensitive); + traverse(o.node, hightlightTextNode); + function hightlightTextNode(textNode) { + var match, patternNode, wrapperNode; + if (match = regex.exec(textNode.data)) { + wrapperNode = doc.createElement(o.tagName); + o.className && (wrapperNode.className = o.className); + patternNode = textNode.splitText(match.index); + patternNode.splitText(match[0].length); + wrapperNode.appendChild(patternNode.cloneNode(true)); + textNode.parentNode.replaceChild(wrapperNode, patternNode); + } + return !!match; + } + function traverse(el, hightlightTextNode) { + var childNode, TEXT_NODE_TYPE = 3; + for (var i = 0; i < el.childNodes.length; i++) { + childNode = el.childNodes[i]; + if (childNode.nodeType === TEXT_NODE_TYPE) { + i += hightlightTextNode(childNode) ? 1 : 0; + } else { + traverse(childNode, hightlightTextNode); + } + } + } + }; + function accent_replacer(chr) { + return accented[chr.toUpperCase()] || chr; + } + function getRegex(patterns, caseSensitive, wordsOnly, diacriticInsensitive) { + var escapedPatterns = [], regexStr; + for (var i = 0, len = patterns.length; i < len; i++) { + var escapedWord = _.escapeRegExChars(patterns[i]); + if (diacriticInsensitive) { + escapedWord = escapedWord.replace(/\S/g, accent_replacer); + } + escapedPatterns.push(escapedWord); + } + regexStr = wordsOnly ? "\\b(" + escapedPatterns.join("|") + ")\\b" : "(" + escapedPatterns.join("|") + ")"; + return caseSensitive ? new RegExp(regexStr) : new RegExp(regexStr, "i"); + } + }(window.document); + var Input = function() { + "use strict"; + var specialKeyCodeMap; + specialKeyCodeMap = { + 9: "tab", + 27: "esc", + 37: "left", + 39: "right", + 13: "enter", + 38: "up", + 40: "down" + }; + function Input(o, www) { + var id; + o = o || {}; + if (!o.input) { + $.error("input is missing"); + } + www.mixin(this); + this.$hint = $(o.hint); + this.$input = $(o.input); + this.$menu = $(o.menu); + id = this.$input.attr("id") || _.guid(); + this.$menu.attr("id", id + "_listbox"); + this.$hint.attr({ + "aria-hidden": true + }); + this.$input.attr({ + "aria-owns": id + "_listbox", + "aria-controls": id + "_listbox", + role: "combobox", + "aria-autocomplete": "list", + "aria-expanded": false + }); + this.query = this.$input.val(); + this.queryWhenFocused = this.hasFocus() ? this.query : null; + this.$overflowHelper = buildOverflowHelper(this.$input); + this._checkLanguageDirection(); + if (this.$hint.length === 0) { + this.setHint = this.getHint = this.clearHint = this.clearHintIfInvalid = _.noop; + } + this.onSync("cursorchange", this._updateDescendent); + } + Input.normalizeQuery = function(str) { + return _.toStr(str).replace(/^\s*/g, "").replace(/\s{2,}/g, " "); + }; + _.mixin(Input.prototype, EventEmitter, { + _onBlur: function onBlur() { + this.resetInputValue(); + this.trigger("blurred"); + }, + _onFocus: function onFocus() { + this.queryWhenFocused = this.query; + this.trigger("focused"); + }, + _onKeydown: function onKeydown($e) { + var keyName = specialKeyCodeMap[$e.which || $e.keyCode]; + this._managePreventDefault(keyName, $e); + if (keyName && this._shouldTrigger(keyName, $e)) { + this.trigger(keyName + "Keyed", $e); + } + }, + _onInput: function onInput() { + this._setQuery(this.getInputValue()); + this.clearHintIfInvalid(); + this._checkLanguageDirection(); + }, + _managePreventDefault: function managePreventDefault(keyName, $e) { + var preventDefault; + switch (keyName) { + case "up": + case "down": + preventDefault = !withModifier($e); + break; + + default: + preventDefault = false; + } + preventDefault && $e.preventDefault(); + }, + _shouldTrigger: function shouldTrigger(keyName, $e) { + var trigger; + switch (keyName) { + case "tab": + trigger = !withModifier($e); + break; + + default: + trigger = true; + } + return trigger; + }, + _checkLanguageDirection: function checkLanguageDirection() { + var dir = (this.$input.css("direction") || "ltr").toLowerCase(); + if (this.dir !== dir) { + this.dir = dir; + this.$hint.attr("dir", dir); + this.trigger("langDirChanged", dir); + } + }, + _setQuery: function setQuery(val, silent) { + var areEquivalent, hasDifferentWhitespace; + areEquivalent = areQueriesEquivalent(val, this.query); + hasDifferentWhitespace = areEquivalent ? this.query.length !== val.length : false; + this.query = val; + if (!silent && !areEquivalent) { + this.trigger("queryChanged", this.query); + } else if (!silent && hasDifferentWhitespace) { + this.trigger("whitespaceChanged", this.query); + } + }, + _updateDescendent: function updateDescendent(event, id) { + this.$input.attr("aria-activedescendant", id); + }, + bind: function() { + var that = this, onBlur, onFocus, onKeydown, onInput; + onBlur = _.bind(this._onBlur, this); + onFocus = _.bind(this._onFocus, this); + onKeydown = _.bind(this._onKeydown, this); + onInput = _.bind(this._onInput, this); + this.$input.on("blur.tt", onBlur).on("focus.tt", onFocus).on("keydown.tt", onKeydown); + if (!_.isMsie() || _.isMsie() > 9) { + this.$input.on("input.tt", onInput); + } else { + this.$input.on("keydown.tt keypress.tt cut.tt paste.tt", function($e) { + if (specialKeyCodeMap[$e.which || $e.keyCode]) { + return; + } + _.defer(_.bind(that._onInput, that, $e)); + }); + } + return this; + }, + focus: function focus() { + this.$input.focus(); + }, + blur: function blur() { + this.$input.blur(); + }, + getLangDir: function getLangDir() { + return this.dir; + }, + getQuery: function getQuery() { + return this.query || ""; + }, + setQuery: function setQuery(val, silent) { + this.setInputValue(val); + this._setQuery(val, silent); + }, + hasQueryChangedSinceLastFocus: function hasQueryChangedSinceLastFocus() { + return this.query !== this.queryWhenFocused; + }, + getInputValue: function getInputValue() { + return this.$input.val(); + }, + setInputValue: function setInputValue(value) { + this.$input.val(value); + this.clearHintIfInvalid(); + this._checkLanguageDirection(); + }, + resetInputValue: function resetInputValue() { + this.setInputValue(this.query); + }, + getHint: function getHint() { + return this.$hint.val(); + }, + setHint: function setHint(value) { + this.$hint.val(value); + }, + clearHint: function clearHint() { + this.setHint(""); + }, + clearHintIfInvalid: function clearHintIfInvalid() { + var val, hint, valIsPrefixOfHint, isValid; + val = this.getInputValue(); + hint = this.getHint(); + valIsPrefixOfHint = val !== hint && hint.indexOf(val) === 0; + isValid = val !== "" && valIsPrefixOfHint && !this.hasOverflow(); + !isValid && this.clearHint(); + }, + hasFocus: function hasFocus() { + return this.$input.is(":focus"); + }, + hasOverflow: function hasOverflow() { + var constraint = this.$input.width() - 2; + this.$overflowHelper.text(this.getInputValue()); + return this.$overflowHelper.width() >= constraint; + }, + isCursorAtEnd: function() { + var valueLength, selectionStart, range; + valueLength = this.$input.val().length; + selectionStart = this.$input[0].selectionStart; + if (_.isNumber(selectionStart)) { + return selectionStart === valueLength; + } else if (document.selection) { + range = document.selection.createRange(); + range.moveStart("character", -valueLength); + return valueLength === range.text.length; + } + return true; + }, + destroy: function destroy() { + this.$hint.off(".tt"); + this.$input.off(".tt"); + this.$overflowHelper.remove(); + this.$hint = this.$input = this.$overflowHelper = $("
"); + }, + setAriaExpanded: function setAriaExpanded(value) { + this.$input.attr("aria-expanded", value); + } + }); + return Input; + function buildOverflowHelper($input) { + return $('').css({ + position: "absolute", + visibility: "hidden", + whiteSpace: "pre", + fontFamily: $input.css("font-family"), + fontSize: $input.css("font-size"), + fontStyle: $input.css("font-style"), + fontVariant: $input.css("font-variant"), + fontWeight: $input.css("font-weight"), + wordSpacing: $input.css("word-spacing"), + letterSpacing: $input.css("letter-spacing"), + textIndent: $input.css("text-indent"), + textRendering: $input.css("text-rendering"), + textTransform: $input.css("text-transform") + }).insertAfter($input); + } + function areQueriesEquivalent(a, b) { + return Input.normalizeQuery(a) === Input.normalizeQuery(b); + } + function withModifier($e) { + return $e.altKey || $e.ctrlKey || $e.metaKey || $e.shiftKey; + } + }(); + var Dataset = function() { + "use strict"; + var keys, nameGenerator; + keys = { + dataset: "tt-selectable-dataset", + val: "tt-selectable-display", + obj: "tt-selectable-object" + }; + nameGenerator = _.getIdGenerator(); + function Dataset(o, www) { + o = o || {}; + o.templates = o.templates || {}; + o.templates.notFound = o.templates.notFound || o.templates.empty; + if (!o.source) { + $.error("missing source"); + } + if (!o.node) { + $.error("missing node"); + } + if (o.name && !isValidName(o.name)) { + $.error("invalid dataset name: " + o.name); + } + www.mixin(this); + this.highlight = !!o.highlight; + this.name = _.toStr(o.name || nameGenerator()); + this.limit = o.limit || 5; + this.displayFn = getDisplayFn(o.display || o.displayKey); + this.templates = getTemplates(o.templates, this.displayFn); + this.source = o.source.__ttAdapter ? o.source.__ttAdapter() : o.source; + this.async = _.isUndefined(o.async) ? this.source.length > 2 : !!o.async; + this._resetLastSuggestion(); + this.$el = $(o.node).attr("role", "presentation").addClass(this.classes.dataset).addClass(this.classes.dataset + "-" + this.name); + } + Dataset.extractData = function extractData(el) { + var $el = $(el); + if ($el.data(keys.obj)) { + return { + dataset: $el.data(keys.dataset) || "", + val: $el.data(keys.val) || "", + obj: $el.data(keys.obj) || null + }; + } + return null; + }; + _.mixin(Dataset.prototype, EventEmitter, { + _overwrite: function overwrite(query, suggestions) { + suggestions = suggestions || []; + if (suggestions.length) { + this._renderSuggestions(query, suggestions); + } else if (this.async && this.templates.pending) { + this._renderPending(query); + } else if (!this.async && this.templates.notFound) { + this._renderNotFound(query); + } else { + this._empty(); + } + this.trigger("rendered", suggestions, false, this.name); + }, + _append: function append(query, suggestions) { + suggestions = suggestions || []; + if (suggestions.length && this.$lastSuggestion.length) { + this._appendSuggestions(query, suggestions); + } else if (suggestions.length) { + this._renderSuggestions(query, suggestions); + } else if (!this.$lastSuggestion.length && this.templates.notFound) { + this._renderNotFound(query); + } + this.trigger("rendered", suggestions, true, this.name); + }, + _renderSuggestions: function renderSuggestions(query, suggestions) { + var $fragment; + $fragment = this._getSuggestionsFragment(query, suggestions); + this.$lastSuggestion = $fragment.children().last(); + this.$el.html($fragment).prepend(this._getHeader(query, suggestions)).append(this._getFooter(query, suggestions)); + }, + _appendSuggestions: function appendSuggestions(query, suggestions) { + var $fragment, $lastSuggestion; + $fragment = this._getSuggestionsFragment(query, suggestions); + $lastSuggestion = $fragment.children().last(); + this.$lastSuggestion.after($fragment); + this.$lastSuggestion = $lastSuggestion; + }, + _renderPending: function renderPending(query) { + var template = this.templates.pending; + this._resetLastSuggestion(); + template && this.$el.html(template({ + query: query, + dataset: this.name + })); + }, + _renderNotFound: function renderNotFound(query) { + var template = this.templates.notFound; + this._resetLastSuggestion(); + template && this.$el.html(template({ + query: query, + dataset: this.name + })); + }, + _empty: function empty() { + this.$el.empty(); + this._resetLastSuggestion(); + }, + _getSuggestionsFragment: function getSuggestionsFragment(query, suggestions) { + var that = this, fragment; + fragment = document.createDocumentFragment(); + _.each(suggestions, function getSuggestionNode(suggestion) { + var $el, context; + context = that._injectQuery(query, suggestion); + $el = $(that.templates.suggestion(context)).data(keys.dataset, that.name).data(keys.obj, suggestion).data(keys.val, that.displayFn(suggestion)).addClass(that.classes.suggestion + " " + that.classes.selectable); + fragment.appendChild($el[0]); + }); + this.highlight && highlight({ + className: this.classes.highlight, + node: fragment, + pattern: query + }); + return $(fragment); + }, + _getFooter: function getFooter(query, suggestions) { + return this.templates.footer ? this.templates.footer({ + query: query, + suggestions: suggestions, + dataset: this.name + }) : null; + }, + _getHeader: function getHeader(query, suggestions) { + return this.templates.header ? this.templates.header({ + query: query, + suggestions: suggestions, + dataset: this.name + }) : null; + }, + _resetLastSuggestion: function resetLastSuggestion() { + this.$lastSuggestion = $(); + }, + _injectQuery: function injectQuery(query, obj) { + return _.isObject(obj) ? _.mixin({ + _query: query + }, obj) : obj; + }, + update: function update(query) { + var that = this, canceled = false, syncCalled = false, rendered = 0; + this.cancel(); + this.cancel = function cancel() { + canceled = true; + that.cancel = $.noop; + that.async && that.trigger("asyncCanceled", query, that.name); + }; + this.source(query, sync, async); + !syncCalled && sync([]); + function sync(suggestions) { + if (syncCalled) { + return; + } + syncCalled = true; + suggestions = (suggestions || []).slice(0, that.limit); + rendered = suggestions.length; + that._overwrite(query, suggestions); + if (rendered < that.limit && that.async) { + that.trigger("asyncRequested", query, that.name); + } + } + function async(suggestions) { + suggestions = suggestions || []; + if (!canceled && rendered < that.limit) { + that.cancel = $.noop; + var idx = Math.abs(rendered - that.limit); + rendered += idx; + that._append(query, suggestions.slice(0, idx)); + that.async && that.trigger("asyncReceived", query, that.name); + } + } + }, + cancel: $.noop, + clear: function clear() { + this._empty(); + this.cancel(); + this.trigger("cleared"); + }, + isEmpty: function isEmpty() { + return this.$el.is(":empty"); + }, + destroy: function destroy() { + this.$el = $("
"); + } + }); + return Dataset; + function getDisplayFn(display) { + display = display || _.stringify; + return _.isFunction(display) ? display : displayFn; + function displayFn(obj) { + return obj[display]; + } + } + function getTemplates(templates, displayFn) { + return { + notFound: templates.notFound && _.templatify(templates.notFound), + pending: templates.pending && _.templatify(templates.pending), + header: templates.header && _.templatify(templates.header), + footer: templates.footer && _.templatify(templates.footer), + suggestion: templates.suggestion ? userSuggestionTemplate : suggestionTemplate + }; + function userSuggestionTemplate(context) { + var template = templates.suggestion; + return $(template(context)).attr("id", _.guid()); + } + function suggestionTemplate(context) { + return $('
').attr("id", _.guid()).text(displayFn(context)); + } + } + function isValidName(str) { + return /^[_a-zA-Z0-9-]+$/.test(str); + } + }(); + var Menu = function() { + "use strict"; + function Menu(o, www) { + var that = this; + o = o || {}; + if (!o.node) { + $.error("node is required"); + } + www.mixin(this); + this.$node = $(o.node); + this.query = null; + this.datasets = _.map(o.datasets, initializeDataset); + function initializeDataset(oDataset) { + var node = that.$node.find(oDataset.node).first(); + oDataset.node = node.length ? node : $("
").appendTo(that.$node); + return new Dataset(oDataset, www); + } + } + _.mixin(Menu.prototype, EventEmitter, { + _onSelectableClick: function onSelectableClick($e) { + this.trigger("selectableClicked", $($e.currentTarget)); + }, + _onRendered: function onRendered(type, dataset, suggestions, async) { + this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty()); + this.trigger("datasetRendered", dataset, suggestions, async); + }, + _onCleared: function onCleared() { + this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty()); + this.trigger("datasetCleared"); + }, + _propagate: function propagate() { + this.trigger.apply(this, arguments); + }, + _allDatasetsEmpty: function allDatasetsEmpty() { + return _.every(this.datasets, _.bind(function isDatasetEmpty(dataset) { + var isEmpty = dataset.isEmpty(); + this.$node.attr("aria-expanded", !isEmpty); + return isEmpty; + }, this)); + }, + _getSelectables: function getSelectables() { + return this.$node.find(this.selectors.selectable); + }, + _removeCursor: function _removeCursor() { + var $selectable = this.getActiveSelectable(); + $selectable && $selectable.removeClass(this.classes.cursor); + }, + _ensureVisible: function ensureVisible($el) { + var elTop, elBottom, nodeScrollTop, nodeHeight; + elTop = $el.position().top; + elBottom = elTop + $el.outerHeight(true); + nodeScrollTop = this.$node.scrollTop(); + nodeHeight = this.$node.height() + parseInt(this.$node.css("paddingTop"), 10) + parseInt(this.$node.css("paddingBottom"), 10); + if (elTop < 0) { + this.$node.scrollTop(nodeScrollTop + elTop); + } else if (nodeHeight < elBottom) { + this.$node.scrollTop(nodeScrollTop + (elBottom - nodeHeight)); + } + }, + bind: function() { + var that = this, onSelectableClick; + onSelectableClick = _.bind(this._onSelectableClick, this); + this.$node.on("click.tt", this.selectors.selectable, onSelectableClick); + this.$node.on("mouseover", this.selectors.selectable, function() { + that.setCursor($(this)); + }); + this.$node.on("mouseleave", function() { + that._removeCursor(); + }); + _.each(this.datasets, function(dataset) { + dataset.onSync("asyncRequested", that._propagate, that).onSync("asyncCanceled", that._propagate, that).onSync("asyncReceived", that._propagate, that).onSync("rendered", that._onRendered, that).onSync("cleared", that._onCleared, that); + }); + return this; + }, + isOpen: function isOpen() { + return this.$node.hasClass(this.classes.open); + }, + open: function open() { + this.$node.scrollTop(0); + this.$node.addClass(this.classes.open); + }, + close: function close() { + this.$node.attr("aria-expanded", false); + this.$node.removeClass(this.classes.open); + this._removeCursor(); + }, + setLanguageDirection: function setLanguageDirection(dir) { + this.$node.attr("dir", dir); + }, + selectableRelativeToCursor: function selectableRelativeToCursor(delta) { + var $selectables, $oldCursor, oldIndex, newIndex; + $oldCursor = this.getActiveSelectable(); + $selectables = this._getSelectables(); + oldIndex = $oldCursor ? $selectables.index($oldCursor) : -1; + newIndex = oldIndex + delta; + newIndex = (newIndex + 1) % ($selectables.length + 1) - 1; + newIndex = newIndex < -1 ? $selectables.length - 1 : newIndex; + return newIndex === -1 ? null : $selectables.eq(newIndex); + }, + setCursor: function setCursor($selectable) { + this._removeCursor(); + if ($selectable = $selectable && $selectable.first()) { + $selectable.addClass(this.classes.cursor); + this._ensureVisible($selectable); + } + }, + getSelectableData: function getSelectableData($el) { + return $el && $el.length ? Dataset.extractData($el) : null; + }, + getActiveSelectable: function getActiveSelectable() { + var $selectable = this._getSelectables().filter(this.selectors.cursor).first(); + return $selectable.length ? $selectable : null; + }, + getTopSelectable: function getTopSelectable() { + var $selectable = this._getSelectables().first(); + return $selectable.length ? $selectable : null; + }, + update: function update(query) { + var isValidUpdate = query !== this.query; + if (isValidUpdate) { + this.query = query; + _.each(this.datasets, updateDataset); + } + return isValidUpdate; + function updateDataset(dataset) { + dataset.update(query); + } + }, + empty: function empty() { + _.each(this.datasets, clearDataset); + this.query = null; + this.$node.addClass(this.classes.empty); + function clearDataset(dataset) { + dataset.clear(); + } + }, + destroy: function destroy() { + this.$node.off(".tt"); + this.$node = $("
"); + _.each(this.datasets, destroyDataset); + function destroyDataset(dataset) { + dataset.destroy(); + } + } + }); + return Menu; + }(); + var Status = function() { + "use strict"; + function Status(options) { + this.$el = $("", { + role: "status", + "aria-live": "polite" + }).css({ + position: "absolute", + padding: "0", + border: "0", + height: "1px", + width: "1px", + "margin-bottom": "-1px", + "margin-right": "-1px", + overflow: "hidden", + clip: "rect(0 0 0 0)", + "white-space": "nowrap" + }); + options.$input.after(this.$el); + _.each(options.menu.datasets, _.bind(function(dataset) { + if (dataset.onSync) { + dataset.onSync("rendered", _.bind(this.update, this)); + dataset.onSync("cleared", _.bind(this.cleared, this)); + } + }, this)); + } + _.mixin(Status.prototype, { + update: function update(event, suggestions) { + var length = suggestions.length; + var words; + if (length === 1) { + words = { + result: "result", + is: "is" + }; + } else { + words = { + result: "results", + is: "are" + }; + } + this.$el.text(length + " " + words.result + " " + words.is + " available, use up and down arrow keys to navigate."); + }, + cleared: function() { + this.$el.text(""); + } + }); + return Status; + }(); + var DefaultMenu = function() { + "use strict"; + var s = Menu.prototype; + function DefaultMenu() { + Menu.apply(this, [].slice.call(arguments, 0)); + } + _.mixin(DefaultMenu.prototype, Menu.prototype, { + open: function open() { + !this._allDatasetsEmpty() && this._show(); + return s.open.apply(this, [].slice.call(arguments, 0)); + }, + close: function close() { + this._hide(); + return s.close.apply(this, [].slice.call(arguments, 0)); + }, + _onRendered: function onRendered() { + if (this._allDatasetsEmpty()) { + this._hide(); + } else { + this.isOpen() && this._show(); + } + return s._onRendered.apply(this, [].slice.call(arguments, 0)); + }, + _onCleared: function onCleared() { + if (this._allDatasetsEmpty()) { + this._hide(); + } else { + this.isOpen() && this._show(); + } + return s._onCleared.apply(this, [].slice.call(arguments, 0)); + }, + setLanguageDirection: function setLanguageDirection(dir) { + this.$node.css(dir === "ltr" ? this.css.ltr : this.css.rtl); + return s.setLanguageDirection.apply(this, [].slice.call(arguments, 0)); + }, + _hide: function hide() { + this.$node.hide(); + }, + _show: function show() { + this.$node.css("display", "block"); + } + }); + return DefaultMenu; + }(); + var Typeahead = function() { + "use strict"; + function Typeahead(o, www) { + var onFocused, onBlurred, onEnterKeyed, onTabKeyed, onEscKeyed, onUpKeyed, onDownKeyed, onLeftKeyed, onRightKeyed, onQueryChanged, onWhitespaceChanged; + o = o || {}; + if (!o.input) { + $.error("missing input"); + } + if (!o.menu) { + $.error("missing menu"); + } + if (!o.eventBus) { + $.error("missing event bus"); + } + www.mixin(this); + this.eventBus = o.eventBus; + this.minLength = _.isNumber(o.minLength) ? o.minLength : 1; + this.input = o.input; + this.menu = o.menu; + this.enabled = true; + this.autoselect = !!o.autoselect; + this.active = false; + this.input.hasFocus() && this.activate(); + this.dir = this.input.getLangDir(); + this._hacks(); + this.menu.bind().onSync("selectableClicked", this._onSelectableClicked, this).onSync("asyncRequested", this._onAsyncRequested, this).onSync("asyncCanceled", this._onAsyncCanceled, this).onSync("asyncReceived", this._onAsyncReceived, this).onSync("datasetRendered", this._onDatasetRendered, this).onSync("datasetCleared", this._onDatasetCleared, this); + onFocused = c(this, "activate", "open", "_onFocused"); + onBlurred = c(this, "deactivate", "_onBlurred"); + onEnterKeyed = c(this, "isActive", "isOpen", "_onEnterKeyed"); + onTabKeyed = c(this, "isActive", "isOpen", "_onTabKeyed"); + onEscKeyed = c(this, "isActive", "_onEscKeyed"); + onUpKeyed = c(this, "isActive", "open", "_onUpKeyed"); + onDownKeyed = c(this, "isActive", "open", "_onDownKeyed"); + onLeftKeyed = c(this, "isActive", "isOpen", "_onLeftKeyed"); + onRightKeyed = c(this, "isActive", "isOpen", "_onRightKeyed"); + onQueryChanged = c(this, "_openIfActive", "_onQueryChanged"); + onWhitespaceChanged = c(this, "_openIfActive", "_onWhitespaceChanged"); + this.input.bind().onSync("focused", onFocused, this).onSync("blurred", onBlurred, this).onSync("enterKeyed", onEnterKeyed, this).onSync("tabKeyed", onTabKeyed, this).onSync("escKeyed", onEscKeyed, this).onSync("upKeyed", onUpKeyed, this).onSync("downKeyed", onDownKeyed, this).onSync("leftKeyed", onLeftKeyed, this).onSync("rightKeyed", onRightKeyed, this).onSync("queryChanged", onQueryChanged, this).onSync("whitespaceChanged", onWhitespaceChanged, this).onSync("langDirChanged", this._onLangDirChanged, this); + } + _.mixin(Typeahead.prototype, { + _hacks: function hacks() { + var $input, $menu; + $input = this.input.$input || $("
"); + $menu = this.menu.$node || $("
"); + $input.on("blur.tt", function($e) { + var active, isActive, hasActive; + active = document.activeElement; + isActive = $menu.is(active); + hasActive = $menu.has(active).length > 0; + if (_.isMsie() && (isActive || hasActive)) { + $e.preventDefault(); + $e.stopImmediatePropagation(); + _.defer(function() { + $input.focus(); + }); + } + }); + $menu.on("mousedown.tt", function($e) { + $e.preventDefault(); + }); + }, + _onSelectableClicked: function onSelectableClicked(type, $el) { + this.select($el); + }, + _onDatasetCleared: function onDatasetCleared() { + this._updateHint(); + }, + _onDatasetRendered: function onDatasetRendered(type, suggestions, async, dataset) { + this._updateHint(); + if (this.autoselect) { + var cursorClass = this.selectors.cursor.substr(1); + this.menu.$node.find(this.selectors.suggestion).first().addClass(cursorClass); + } + this.eventBus.trigger("render", suggestions, async, dataset); + }, + _onAsyncRequested: function onAsyncRequested(type, dataset, query) { + this.eventBus.trigger("asyncrequest", query, dataset); + }, + _onAsyncCanceled: function onAsyncCanceled(type, dataset, query) { + this.eventBus.trigger("asynccancel", query, dataset); + }, + _onAsyncReceived: function onAsyncReceived(type, dataset, query) { + this.eventBus.trigger("asyncreceive", query, dataset); + }, + _onFocused: function onFocused() { + this._minLengthMet() && this.menu.update(this.input.getQuery()); + }, + _onBlurred: function onBlurred() { + if (this.input.hasQueryChangedSinceLastFocus()) { + this.eventBus.trigger("change", this.input.getQuery()); + } + }, + _onEnterKeyed: function onEnterKeyed(type, $e) { + var $selectable; + if ($selectable = this.menu.getActiveSelectable()) { + if (this.select($selectable)) { + $e.preventDefault(); + $e.stopPropagation(); + } + } else if (this.autoselect) { + if (this.select(this.menu.getTopSelectable())) { + $e.preventDefault(); + $e.stopPropagation(); + } + } + }, + _onTabKeyed: function onTabKeyed(type, $e) { + var $selectable; + if ($selectable = this.menu.getActiveSelectable()) { + this.select($selectable) && $e.preventDefault(); + } else if (this.autoselect) { + if ($selectable = this.menu.getTopSelectable()) { + this.autocomplete($selectable) && $e.preventDefault(); + } + } + }, + _onEscKeyed: function onEscKeyed() { + this.close(); + }, + _onUpKeyed: function onUpKeyed() { + this.moveCursor(-1); + }, + _onDownKeyed: function onDownKeyed() { + this.moveCursor(+1); + }, + _onLeftKeyed: function onLeftKeyed() { + if (this.dir === "rtl" && this.input.isCursorAtEnd()) { + this.autocomplete(this.menu.getActiveSelectable() || this.menu.getTopSelectable()); + } + }, + _onRightKeyed: function onRightKeyed() { + if (this.dir === "ltr" && this.input.isCursorAtEnd()) { + this.autocomplete(this.menu.getActiveSelectable() || this.menu.getTopSelectable()); + } + }, + _onQueryChanged: function onQueryChanged(e, query) { + this._minLengthMet(query) ? this.menu.update(query) : this.menu.empty(); + }, + _onWhitespaceChanged: function onWhitespaceChanged() { + this._updateHint(); + }, + _onLangDirChanged: function onLangDirChanged(e, dir) { + if (this.dir !== dir) { + this.dir = dir; + this.menu.setLanguageDirection(dir); + } + }, + _openIfActive: function openIfActive() { + this.isActive() && this.open(); + }, + _minLengthMet: function minLengthMet(query) { + query = _.isString(query) ? query : this.input.getQuery() || ""; + return query.length >= this.minLength; + }, + _updateHint: function updateHint() { + var $selectable, data, val, query, escapedQuery, frontMatchRegEx, match; + $selectable = this.menu.getTopSelectable(); + data = this.menu.getSelectableData($selectable); + val = this.input.getInputValue(); + if (data && !_.isBlankString(val) && !this.input.hasOverflow()) { + query = Input.normalizeQuery(val); + escapedQuery = _.escapeRegExChars(query); + frontMatchRegEx = new RegExp("^(?:" + escapedQuery + ")(.+$)", "i"); + match = frontMatchRegEx.exec(data.val); + match && this.input.setHint(val + match[1]); + } else { + this.input.clearHint(); + } + }, + isEnabled: function isEnabled() { + return this.enabled; + }, + enable: function enable() { + this.enabled = true; + }, + disable: function disable() { + this.enabled = false; + }, + isActive: function isActive() { + return this.active; + }, + activate: function activate() { + if (this.isActive()) { + return true; + } else if (!this.isEnabled() || this.eventBus.before("active")) { + return false; + } else { + this.active = true; + this.eventBus.trigger("active"); + return true; + } + }, + deactivate: function deactivate() { + if (!this.isActive()) { + return true; + } else if (this.eventBus.before("idle")) { + return false; + } else { + this.active = false; + this.close(); + this.eventBus.trigger("idle"); + return true; + } + }, + isOpen: function isOpen() { + return this.menu.isOpen(); + }, + open: function open() { + if (!this.isOpen() && !this.eventBus.before("open")) { + this.input.setAriaExpanded(true); + this.menu.open(); + this._updateHint(); + this.eventBus.trigger("open"); + } + return this.isOpen(); + }, + close: function close() { + if (this.isOpen() && !this.eventBus.before("close")) { + this.input.setAriaExpanded(false); + this.menu.close(); + this.input.clearHint(); + this.input.resetInputValue(); + this.eventBus.trigger("close"); + } + return !this.isOpen(); + }, + setVal: function setVal(val) { + this.input.setQuery(_.toStr(val)); + }, + getVal: function getVal() { + return this.input.getQuery(); + }, + select: function select($selectable) { + var data = this.menu.getSelectableData($selectable); + if (data && !this.eventBus.before("select", data.obj, data.dataset)) { + this.input.setQuery(data.val, true); + this.eventBus.trigger("select", data.obj, data.dataset); + this.close(); + return true; + } + return false; + }, + autocomplete: function autocomplete($selectable) { + var query, data, isValid; + query = this.input.getQuery(); + data = this.menu.getSelectableData($selectable); + isValid = data && query !== data.val; + if (isValid && !this.eventBus.before("autocomplete", data.obj, data.dataset)) { + this.input.setQuery(data.val); + this.eventBus.trigger("autocomplete", data.obj, data.dataset); + return true; + } + return false; + }, + moveCursor: function moveCursor(delta) { + var query, $candidate, data, suggestion, datasetName, cancelMove, id; + query = this.input.getQuery(); + $candidate = this.menu.selectableRelativeToCursor(delta); + data = this.menu.getSelectableData($candidate); + suggestion = data ? data.obj : null; + datasetName = data ? data.dataset : null; + id = $candidate ? $candidate.attr("id") : null; + this.input.trigger("cursorchange", id); + cancelMove = this._minLengthMet() && this.menu.update(query); + if (!cancelMove && !this.eventBus.before("cursorchange", suggestion, datasetName)) { + this.menu.setCursor($candidate); + if (data) { + if (typeof data.val === "string") { + this.input.setInputValue(data.val); + } + } else { + this.input.resetInputValue(); + this._updateHint(); + } + this.eventBus.trigger("cursorchange", suggestion, datasetName); + return true; + } + return false; + }, + destroy: function destroy() { + this.input.destroy(); + this.menu.destroy(); + } + }); + return Typeahead; + function c(ctx) { + var methods = [].slice.call(arguments, 1); + return function() { + var args = [].slice.call(arguments); + _.each(methods, function(method) { + return ctx[method].apply(ctx, args); + }); + }; + } + }(); + (function() { + "use strict"; + var old, keys, methods; + old = $.fn.typeahead; + keys = { + www: "tt-www", + attrs: "tt-attrs", + typeahead: "tt-typeahead" + }; + methods = { + initialize: function initialize(o, datasets) { + var www; + datasets = _.isArray(datasets) ? datasets : [].slice.call(arguments, 1); + o = o || {}; + www = WWW(o.classNames); + return this.each(attach); + function attach() { + var $input, $wrapper, $hint, $menu, defaultHint, defaultMenu, eventBus, input, menu, status, typeahead, MenuConstructor; + _.each(datasets, function(d) { + d.highlight = !!o.highlight; + }); + $input = $(this); + $wrapper = $(www.html.wrapper); + $hint = $elOrNull(o.hint); + $menu = $elOrNull(o.menu); + defaultHint = o.hint !== false && !$hint; + defaultMenu = o.menu !== false && !$menu; + defaultHint && ($hint = buildHintFromInput($input, www)); + defaultMenu && ($menu = $(www.html.menu).css(www.css.menu)); + $hint && $hint.val(""); + $input = prepInput($input, www); + if (defaultHint || defaultMenu) { + $wrapper.css(www.css.wrapper); + $input.css(defaultHint ? www.css.input : www.css.inputWithNoHint); + $input.wrap($wrapper).parent().prepend(defaultHint ? $hint : null).append(defaultMenu ? $menu : null); + } + MenuConstructor = defaultMenu ? DefaultMenu : Menu; + eventBus = new EventBus({ + el: $input + }); + input = new Input({ + hint: $hint, + input: $input, + menu: $menu + }, www); + menu = new MenuConstructor({ + node: $menu, + datasets: datasets + }, www); + status = new Status({ + $input: $input, + menu: menu + }); + typeahead = new Typeahead({ + input: input, + menu: menu, + eventBus: eventBus, + minLength: o.minLength, + autoselect: o.autoselect + }, www); + $input.data(keys.www, www); + $input.data(keys.typeahead, typeahead); + } + }, + isEnabled: function isEnabled() { + var enabled; + ttEach(this.first(), function(t) { + enabled = t.isEnabled(); + }); + return enabled; + }, + enable: function enable() { + ttEach(this, function(t) { + t.enable(); + }); + return this; + }, + disable: function disable() { + ttEach(this, function(t) { + t.disable(); + }); + return this; + }, + isActive: function isActive() { + var active; + ttEach(this.first(), function(t) { + active = t.isActive(); + }); + return active; + }, + activate: function activate() { + ttEach(this, function(t) { + t.activate(); + }); + return this; + }, + deactivate: function deactivate() { + ttEach(this, function(t) { + t.deactivate(); + }); + return this; + }, + isOpen: function isOpen() { + var open; + ttEach(this.first(), function(t) { + open = t.isOpen(); + }); + return open; + }, + open: function open() { + ttEach(this, function(t) { + t.open(); + }); + return this; + }, + close: function close() { + ttEach(this, function(t) { + t.close(); + }); + return this; + }, + select: function select(el) { + var success = false, $el = $(el); + ttEach(this.first(), function(t) { + success = t.select($el); + }); + return success; + }, + autocomplete: function autocomplete(el) { + var success = false, $el = $(el); + ttEach(this.first(), function(t) { + success = t.autocomplete($el); + }); + return success; + }, + moveCursor: function moveCursoe(delta) { + var success = false; + ttEach(this.first(), function(t) { + success = t.moveCursor(delta); + }); + return success; + }, + val: function val(newVal) { + var query; + if (!arguments.length) { + ttEach(this.first(), function(t) { + query = t.getVal(); + }); + return query; + } else { + ttEach(this, function(t) { + t.setVal(_.toStr(newVal)); + }); + return this; + } + }, + destroy: function destroy() { + ttEach(this, function(typeahead, $input) { + revert($input); + typeahead.destroy(); + }); + return this; + } + }; + $.fn.typeahead = function(method) { + if (methods[method]) { + return methods[method].apply(this, [].slice.call(arguments, 1)); + } else { + return methods.initialize.apply(this, arguments); + } + }; + $.fn.typeahead.noConflict = function noConflict() { + $.fn.typeahead = old; + return this; + }; + function ttEach($els, fn) { + $els.each(function() { + var $input = $(this), typeahead; + (typeahead = $input.data(keys.typeahead)) && fn(typeahead, $input); + }); + } + function buildHintFromInput($input, www) { + return $input.clone().addClass(www.classes.hint).removeData().css(www.css.hint).css(getBackgroundStyles($input)).prop({ + readonly: true, + required: false + }).removeAttr("id name placeholder").removeClass("required").attr({ + spellcheck: "false", + tabindex: -1 + }); + } + function prepInput($input, www) { + $input.data(keys.attrs, { + dir: $input.attr("dir"), + autocomplete: $input.attr("autocomplete"), + spellcheck: $input.attr("spellcheck"), + style: $input.attr("style") + }); + $input.addClass(www.classes.input).attr({ + spellcheck: false + }); + try { + !$input.attr("dir") && $input.attr("dir", "auto"); + } catch (e) {} + return $input; + } + function getBackgroundStyles($el) { + return { + backgroundAttachment: $el.css("background-attachment"), + backgroundClip: $el.css("background-clip"), + backgroundColor: $el.css("background-color"), + backgroundImage: $el.css("background-image"), + backgroundOrigin: $el.css("background-origin"), + backgroundPosition: $el.css("background-position"), + backgroundRepeat: $el.css("background-repeat"), + backgroundSize: $el.css("background-size") + }; + } + function revert($input) { + var www, $wrapper; + www = $input.data(keys.www); + $wrapper = $input.parent().filter(www.selectors.wrapper); + _.each($input.data(keys.attrs), function(val, key) { + _.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val); + }); + $input.removeData(keys.typeahead).removeData(keys.www).removeData(keys.attr).removeClass(www.classes.input); + if ($wrapper.length) { + $input.detach().insertAfter($wrapper); + $wrapper.remove(); + } + } + function $elOrNull(obj) { + var isValid, $el; + isValid = _.isJQuery(obj) || _.isElement(obj); + $el = isValid ? $(obj).first() : []; + return $el.length ? $el : null; + } + })(); +}); \ No newline at end of file diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/search.json b/docsets/SWCompression.docset/Contents/Resources/Documents/search.json new file mode 100644 index 00000000..33742659 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/search.json @@ -0,0 +1 @@ +{"Enums/FileSystemType.html#/s:13SWCompression14FileSystemTypeO3fatyA2CmF":{"name":"fat","abstract":"

FAT filesystem.

","parent_name":"FileSystemType"},"Enums/FileSystemType.html#/s:13SWCompression14FileSystemTypeO9macintoshyA2CmF":{"name":"macintosh","abstract":"

Filesystem of older Macintosh systems.

","parent_name":"FileSystemType"},"Enums/FileSystemType.html#/s:13SWCompression14FileSystemTypeO4ntfsyA2CmF":{"name":"ntfs","abstract":"

NTFS.

","parent_name":"FileSystemType"},"Enums/FileSystemType.html#/s:13SWCompression14FileSystemTypeO5otheryA2CmF":{"name":"other","abstract":"

Other/unknown file system.

","parent_name":"FileSystemType"},"Enums/FileSystemType.html#/s:13SWCompression14FileSystemTypeO4unixyA2CmF":{"name":"unix","abstract":"

One of many file systems of UNIX-like OS.

","parent_name":"FileSystemType"},"Enums/CompressionMethod.html#/s:13SWCompression17CompressionMethodO5bzip2yA2CmF":{"name":"bzip2","abstract":"

BZip2.

","parent_name":"CompressionMethod"},"Enums/CompressionMethod.html#/s:13SWCompression17CompressionMethodO4copyyA2CmF":{"name":"copy","abstract":"

Copy (no compression).

","parent_name":"CompressionMethod"},"Enums/CompressionMethod.html#/s:13SWCompression17CompressionMethodO7deflateyA2CmF":{"name":"deflate","abstract":"

Deflate.

","parent_name":"CompressionMethod"},"Enums/CompressionMethod.html#/s:13SWCompression17CompressionMethodO4lzmayA2CmF":{"name":"lzma","abstract":"

LZMA.

","parent_name":"CompressionMethod"},"Enums/CompressionMethod.html#/s:13SWCompression17CompressionMethodO5lzma2yA2CmF":{"name":"lzma2","abstract":"

LZMA 2.

","parent_name":"CompressionMethod"},"Enums/CompressionMethod.html#/s:13SWCompression17CompressionMethodO5otheryA2CmF":{"name":"other","abstract":"

Other/unknown method.

","parent_name":"CompressionMethod"},"Structs/Permissions.html#/s:13SWCompression11PermissionsV8rawValues6UInt32Vvp":{"name":"rawValue","abstract":"

Raw bit flags value (in decimal).

","parent_name":"Permissions"},"Structs/Permissions.html#/s:13SWCompression11PermissionsV8rawValueACs6UInt32V_tcfc":{"name":"init(rawValue:)","abstract":"

Initializes permissions with bit flags in decimal.

","parent_name":"Permissions"},"Structs/Permissions.html#/s:13SWCompression11PermissionsV6setuidACvpZ":{"name":"setuid","abstract":"

Set UID.

","parent_name":"Permissions"},"Structs/Permissions.html#/s:13SWCompression11PermissionsV6setgidACvpZ":{"name":"setgid","abstract":"

Set GID.

","parent_name":"Permissions"},"Structs/Permissions.html#/s:13SWCompression11PermissionsV6stickyACvpZ":{"name":"sticky","abstract":"

Sticky bit.

","parent_name":"Permissions"},"Structs/Permissions.html#/s:13SWCompression11PermissionsV9readOwnerACvpZ":{"name":"readOwner","abstract":"

Owner can read.

","parent_name":"Permissions"},"Structs/Permissions.html#/s:13SWCompression11PermissionsV10writeOwnerACvpZ":{"name":"writeOwner","abstract":"

Owner can write.

","parent_name":"Permissions"},"Structs/Permissions.html#/s:13SWCompression11PermissionsV12executeOwnerACvpZ":{"name":"executeOwner","abstract":"

Owner can execute.

","parent_name":"Permissions"},"Structs/Permissions.html#/s:13SWCompression11PermissionsV9readGroupACvpZ":{"name":"readGroup","abstract":"

Group can read.

","parent_name":"Permissions"},"Structs/Permissions.html#/s:13SWCompression11PermissionsV10writeGroupACvpZ":{"name":"writeGroup","abstract":"

Group can write.

","parent_name":"Permissions"},"Structs/Permissions.html#/s:13SWCompression11PermissionsV12executeGroupACvpZ":{"name":"executeGroup","abstract":"

Group can execute.

","parent_name":"Permissions"},"Structs/Permissions.html#/s:13SWCompression11PermissionsV9readOtherACvpZ":{"name":"readOther","abstract":"

Others can read.

","parent_name":"Permissions"},"Structs/Permissions.html#/s:13SWCompression11PermissionsV10writeOtherACvpZ":{"name":"writeOther","abstract":"

Others can write.

","parent_name":"Permissions"},"Structs/Permissions.html#/s:13SWCompression11PermissionsV12executeOtherACvpZ":{"name":"executeOther","abstract":"

Others can execute.

","parent_name":"Permissions"},"Structs/DosAttributes.html#/s:13SWCompression13DosAttributesV8rawValues6UInt32Vvp":{"name":"rawValue","abstract":"

Raw bit flags value.

","parent_name":"DosAttributes"},"Structs/DosAttributes.html#/s:13SWCompression13DosAttributesV8rawValueACs6UInt32V_tcfc":{"name":"init(rawValue:)","abstract":"

Initializes attributes with bit flags.

","parent_name":"DosAttributes"},"Structs/DosAttributes.html#/s:13SWCompression13DosAttributesV7archiveACvpZ":{"name":"archive","abstract":"

File is archive or archived.

","parent_name":"DosAttributes"},"Structs/DosAttributes.html#/s:13SWCompression13DosAttributesV9directoryACvpZ":{"name":"directory","abstract":"

File is a directory.

","parent_name":"DosAttributes"},"Structs/DosAttributes.html#/s:13SWCompression13DosAttributesV6volumeACvpZ":{"name":"volume","abstract":"

File is a volume.

","parent_name":"DosAttributes"},"Structs/DosAttributes.html#/s:13SWCompression13DosAttributesV6systemACvpZ":{"name":"system","abstract":"

File is a system file.

","parent_name":"DosAttributes"},"Structs/DosAttributes.html#/s:13SWCompression13DosAttributesV6hiddenACvpZ":{"name":"hidden","abstract":"

File is hidden.

","parent_name":"DosAttributes"},"Structs/DosAttributes.html#/s:13SWCompression13DosAttributesV8readOnlyACvpZ":{"name":"readOnly","abstract":"

File is read-only.

","parent_name":"DosAttributes"},"Enums/ContainerEntryType.html#/s:13SWCompression18ContainerEntryTypeO12blockSpecialyA2CmF":{"name":"blockSpecial","abstract":"

Block special file.

","parent_name":"ContainerEntryType"},"Enums/ContainerEntryType.html#/s:13SWCompression18ContainerEntryTypeO16characterSpecialyA2CmF":{"name":"characterSpecial","abstract":"

Character special file.

","parent_name":"ContainerEntryType"},"Enums/ContainerEntryType.html#/s:13SWCompression18ContainerEntryTypeO10contiguousyA2CmF":{"name":"contiguous","abstract":"

Contiguous file.

","parent_name":"ContainerEntryType"},"Enums/ContainerEntryType.html#/s:13SWCompression18ContainerEntryTypeO9directoryyA2CmF":{"name":"directory","abstract":"

Directory.

","parent_name":"ContainerEntryType"},"Enums/ContainerEntryType.html#/s:13SWCompression18ContainerEntryTypeO4fifoyA2CmF":{"name":"fifo","abstract":"

FIFO special file.

","parent_name":"ContainerEntryType"},"Enums/ContainerEntryType.html#/s:13SWCompression18ContainerEntryTypeO8hardLinkyA2CmF":{"name":"hardLink","abstract":"

Hard link.

","parent_name":"ContainerEntryType"},"Enums/ContainerEntryType.html#/s:13SWCompression18ContainerEntryTypeO7regularyA2CmF":{"name":"regular","abstract":"

Regular file.

","parent_name":"ContainerEntryType"},"Enums/ContainerEntryType.html#/s:13SWCompression18ContainerEntryTypeO6socketyA2CmF":{"name":"socket","abstract":"

Socket.

","parent_name":"ContainerEntryType"},"Enums/ContainerEntryType.html#/s:13SWCompression18ContainerEntryTypeO12symbolicLinkyA2CmF":{"name":"symbolicLink","abstract":"

Symbolic link.

","parent_name":"ContainerEntryType"},"Enums/ContainerEntryType.html#/s:13SWCompression18ContainerEntryTypeO7unknownyA2CmF":{"name":"unknown","abstract":"

Entry type is unknown.

","parent_name":"ContainerEntryType"},"Enums/ContainerEntryType.html":{"name":"ContainerEntryType","abstract":"

Represents the type of a container entry.

"},"Structs/DosAttributes.html":{"name":"DosAttributes","abstract":"

Represents file attributes in DOS format.

"},"Structs/Permissions.html":{"name":"Permissions","abstract":"

Represents file access permissions in UNIX format.

"},"Enums/CompressionMethod.html":{"name":"CompressionMethod","abstract":"

Represents a (de)compression method.

"},"Enums/FileSystemType.html":{"name":"FileSystemType","abstract":"

Represents the type of the file system on which an archive or container was created. File system determines the meaning"},"Protocols/DecompressionAlgorithm.html#/s:13SWCompression22DecompressionAlgorithmP10decompress4data10Foundation4DataVAH_tKFZ":{"name":"decompress(data:)","abstract":"

Decompress data compressed with particular algorithm.

","parent_name":"DecompressionAlgorithm"},"Protocols/CompressionAlgorithm.html#/s:13SWCompression20CompressionAlgorithmP8compress4data10Foundation4DataVAH_tKFZ":{"name":"compress(data:)","abstract":"

Compress data with particular algorithm.

","parent_name":"CompressionAlgorithm"},"Protocols/ContainerEntryInfo.html#/s:13SWCompression18ContainerEntryInfoP4nameSSvp":{"name":"name","abstract":"

Entry’s name.

","parent_name":"ContainerEntryInfo"},"Protocols/ContainerEntryInfo.html#/s:13SWCompression18ContainerEntryInfoP4typeAA0bC4TypeOvp":{"name":"type","abstract":"

Entry’s type.

","parent_name":"ContainerEntryInfo"},"Protocols/ContainerEntryInfo.html#/s:13SWCompression18ContainerEntryInfoP4sizeSiSgvp":{"name":"size","abstract":"

Entry’s data size (can be nil if either data or size aren’t available).

","parent_name":"ContainerEntryInfo"},"Protocols/ContainerEntryInfo.html#/s:13SWCompression18ContainerEntryInfoP10accessTime10Foundation4DateVSgvp":{"name":"accessTime","abstract":"

Entry’s last access time (nil, if not available).

","parent_name":"ContainerEntryInfo"},"Protocols/ContainerEntryInfo.html#/s:13SWCompression18ContainerEntryInfoP12creationTime10Foundation4DateVSgvp":{"name":"creationTime","abstract":"

Entry’s creation time (nil, if not available).

","parent_name":"ContainerEntryInfo"},"Protocols/ContainerEntryInfo.html#/s:13SWCompression18ContainerEntryInfoP16modificationTime10Foundation4DateVSgvp":{"name":"modificationTime","abstract":"

Entry’s last modification time (nil, if not available).

","parent_name":"ContainerEntryInfo"},"Protocols/ContainerEntryInfo.html#/s:13SWCompression18ContainerEntryInfoP11permissionsAA11PermissionsVSgvp":{"name":"permissions","abstract":"

Entry’s permissions in POSIX format (nil, if not available).

","parent_name":"ContainerEntryInfo"},"Protocols/ContainerEntry.html#/s:13SWCompression14ContainerEntryP4InfoQa":{"name":"Info","abstract":"

A type that provides information about an entry.

","parent_name":"ContainerEntry"},"Protocols/ContainerEntry.html#/s:13SWCompression14ContainerEntryP4info4InfoQzvp":{"name":"info","abstract":"

Provides access to information about the entry.

","parent_name":"ContainerEntry"},"Protocols/ContainerEntry.html#/s:13SWCompression14ContainerEntryP4data10Foundation4DataVSgvp":{"name":"data","abstract":"

Entry’s data (nil if entry is a directory or data isn’t available).

","parent_name":"ContainerEntry"},"Protocols/Container.html#/s:13SWCompression9ContainerP5EntryQa":{"name":"Entry","abstract":"

A type that represents an entry from this container.

","parent_name":"Container"},"Protocols/Container.html#/s:13SWCompression9ContainerP4open9containerSay5EntryQzG10Foundation4DataV_tKFZ":{"name":"open(container:)","abstract":"

Retrieve all container entries with their data.

","parent_name":"Container"},"Protocols/Container.html#/s:13SWCompression9ContainerP4info9containerSay5Entry_4InfoQZG10Foundation4DataV_tKFZ":{"name":"info(container:)","abstract":"

Retrieve information about all container entries (without their data).

","parent_name":"Container"},"Protocols/Archive.html#/s:13SWCompression7ArchiveP9unarchive7archive10Foundation4DataVAH_tKFZ":{"name":"unarchive(archive:)","abstract":"

Unarchive data from the archive.

","parent_name":"Archive"},"Protocols/Archive.html":{"name":"Archive","abstract":"

A type that represents an archive.

"},"Protocols/Container.html":{"name":"Container","abstract":"

A type that represents a container with files, directories and/or other data.

"},"Protocols/ContainerEntry.html":{"name":"ContainerEntry","abstract":"

A type that represents an entry from the container with its data and information.

"},"Protocols/ContainerEntryInfo.html":{"name":"ContainerEntryInfo","abstract":"

A type that provides access to information about an entry from the container.

"},"Protocols/CompressionAlgorithm.html":{"name":"CompressionAlgorithm","abstract":"

A type that provides an implementation of a particular compression algorithm.

"},"Protocols/DecompressionAlgorithm.html":{"name":"DecompressionAlgorithm","abstract":"

A type that provides an implementation of a particular decompression algorithm.

"},"Enums/ZlibError.html#/s:13SWCompression9ZlibErrorO22wrongCompressionMethodyA2CmF":{"name":"wrongCompressionMethod","abstract":"

Compression method used in archive is different from Deflate, which is the only supported one.

","parent_name":"ZlibError"},"Enums/ZlibError.html#/s:13SWCompression9ZlibErrorO20wrongCompressionInfoyA2CmF":{"name":"wrongCompressionInfo","abstract":"

Compression info has value incompatible with Deflate compression method.

","parent_name":"ZlibError"},"Enums/ZlibError.html#/s:13SWCompression9ZlibErrorO11wrongFcheckyA2CmF":{"name":"wrongFcheck","abstract":"

First two bytes of archive’s flags are inconsistent with each other.

","parent_name":"ZlibError"},"Enums/ZlibError.html#/s:13SWCompression9ZlibErrorO21wrongCompressionLevelyA2CmF":{"name":"wrongCompressionLevel","abstract":"

Compression level has value, which is different from the supported ones.

","parent_name":"ZlibError"},"Enums/ZlibError.html#/s:13SWCompression9ZlibErrorO12wrongAdler32yAC10Foundation4DataVcACmF":{"name":"wrongAdler32(_:)","abstract":"

Computed checksum of uncompressed data doesn’t match the value stored in archive.","parent_name":"ZlibError"},"Enums/ZipError.html#/s:13SWCompression8ZipErrorO27notFoundCentralDirectoryEndyA2CmF":{"name":"notFoundCentralDirectoryEnd","abstract":"

End of Central Directoty record wasn’t found.

","parent_name":"ZipError"},"Enums/ZipError.html#/s:13SWCompression8ZipErrorO14wrongSignatureyA2CmF":{"name":"wrongSignature","abstract":"

Wrong signature of one of container’s structures.

","parent_name":"ZipError"},"Enums/ZipError.html#/s:13SWCompression8ZipErrorO9wrongSizeyA2CmF":{"name":"wrongSize","abstract":"

Wrong either compressed or uncompressed size of a container’s entry.

","parent_name":"ZipError"},"Enums/ZipError.html#/s:13SWCompression8ZipErrorO12wrongVersionyA2CmF":{"name":"wrongVersion","abstract":"

Version needed to process container is unsupported.

","parent_name":"ZipError"},"Enums/ZipError.html#/s:13SWCompression8ZipErrorO24multiVolumesNotSupportedyA2CmF":{"name":"multiVolumesNotSupported","abstract":"

Container is either spanned or consists of several volumes. These features aren’t supported.

","parent_name":"ZipError"},"Enums/ZipError.html#/s:13SWCompression8ZipErrorO22encryptionNotSupportedyA2CmF":{"name":"encryptionNotSupported","abstract":"

Entry or record is encrypted. This feature isn’t supported.

","parent_name":"ZipError"},"Enums/ZipError.html#/s:13SWCompression8ZipErrorO20patchingNotSupportedyA2CmF":{"name":"patchingNotSupported","abstract":"

Entry contains patched data. This feature isn’t supported.

","parent_name":"ZipError"},"Enums/ZipError.html#/s:13SWCompression8ZipErrorO23compressionNotSupportedyA2CmF":{"name":"compressionNotSupported","abstract":"

Entry is compressed using unsupported compression method.

","parent_name":"ZipError"},"Enums/ZipError.html#/s:13SWCompression8ZipErrorO16wrongLocalHeaderyA2CmF":{"name":"wrongLocalHeader","abstract":"

Local header of an entry is inconsistent with Central Directory.

","parent_name":"ZipError"},"Enums/ZipError.html#/s:13SWCompression8ZipErrorO8wrongCRCyACSayAA0B5EntryVGcACmF":{"name":"wrongCRC(_:)","abstract":"

Computed checksum of entry’s data doesn’t match the value stored in the archive.","parent_name":"ZipError"},"Enums/ZipError.html#/s:13SWCompression8ZipErrorO14wrongTextFieldyA2CmF":{"name":"wrongTextField","abstract":"

Either entry’s comment or file name cannot be processed using UTF-8 encoding.

","parent_name":"ZipError"},"Enums/XZError.html#/s:13SWCompression7XZErrorO10wrongMagicyA2CmF":{"name":"wrongMagic","abstract":"

Either ‘magic’ number in header or footer isn’t equal to a predefined value.

","parent_name":"XZError"},"Enums/XZError.html#/s:13SWCompression7XZErrorO10wrongFieldyA2CmF":{"name":"wrongField","abstract":"

One of the special fields in archive has an incorrect value,","parent_name":"XZError"},"Enums/XZError.html#/s:13SWCompression7XZErrorO12wrongInfoCRCyA2CmF":{"name":"wrongInfoCRC","abstract":"

Checksum of one of the fields of archive doesn’t match the value stored in archive.

","parent_name":"XZError"},"Enums/XZError.html#/s:13SWCompression7XZErrorO13wrongFilterIDyA2CmF":{"name":"wrongFilterID","abstract":"

Filter used in archive is unsupported.

","parent_name":"XZError"},"Enums/XZError.html#/s:13SWCompression7XZErrorO15checkTypeSHA256yA2CmF":{"name":"checkTypeSHA256","abstract":"

Archive uses SHA-256 checksum which is unsupported.

","parent_name":"XZError"},"Enums/XZError.html#/s:13SWCompression7XZErrorO13wrongDataSizeyA2CmF":{"name":"wrongDataSize","abstract":"

Either size of decompressed data isn’t equal to the one specified in archive or","parent_name":"XZError"},"Enums/XZError.html#/s:13SWCompression7XZErrorO10wrongCheckyACSay10Foundation4DataVGcACmF":{"name":"wrongCheck(_:)","abstract":"

Computed checksum of uncompressed data doesn’t match the value stored in the archive.","parent_name":"XZError"},"Enums/XZError.html#/s:13SWCompression7XZErrorO12wrongPaddingyA2CmF":{"name":"wrongPadding","abstract":"

Padding (null-bytes appended to an archive’s structure) is incorrect.

","parent_name":"XZError"},"Enums/XZError.html#/s:13SWCompression7XZErrorO21multiByteIntegerErroryA2CmF":{"name":"multiByteIntegerError","abstract":"

Either null byte encountered or exceeded maximum amount bytes while reading multi byte number.

","parent_name":"XZError"},"Enums/TarError.html#/s:13SWCompression8TarErrorO20tooSmallFileIsPassedyA2CmF":{"name":"tooSmallFileIsPassed","abstract":"

Data is unexpectedly truncated.

","parent_name":"TarError"},"Enums/TarError.html#/s:13SWCompression8TarErrorO10wrongFieldyA2CmF":{"name":"wrongField","abstract":"

Failed to process a required TAR header’s field.

","parent_name":"TarError"},"Enums/TarError.html#/s:13SWCompression8TarErrorO19wrongHeaderChecksumyA2CmF":{"name":"wrongHeaderChecksum","abstract":"

Computed checksum of a header doesn’t match the value stored in container.

","parent_name":"TarError"},"Enums/TarError.html#/s:13SWCompression8TarErrorO19wrongPaxHeaderEntryyA2CmF":{"name":"wrongPaxHeaderEntry","abstract":"

Entry from PAX extended header is in incorrect format.

","parent_name":"TarError"},"Enums/TarCreateError.html#/s:13SWCompression14TarCreateErrorO16utf8NonEncodableyA2CmF":{"name":"utf8NonEncodable","abstract":"

One of the TarEntryInfo‘s string properties (such as name) cannot be encoded with UTF-8 encoding.

","parent_name":"TarCreateError"},"Enums/SevenZipError.html#/s:13SWCompression13SevenZipErrorO14wrongSignatureyA2CmF":{"name":"wrongSignature","abstract":"

Wrong container’s signature.

","parent_name":"SevenZipError"},"Enums/SevenZipError.html#/s:13SWCompression13SevenZipErrorO18wrongFormatVersionyA2CmF":{"name":"wrongFormatVersion","abstract":"

Unsupported version of container’s format.

","parent_name":"SevenZipError"},"Enums/SevenZipError.html#/s:13SWCompression13SevenZipErrorO8wrongCRCyA2CmF":{"name":"wrongCRC","abstract":"

CRC either of one of the files from the container or one of the container’s strucutures is incorrect.

","parent_name":"SevenZipError"},"Enums/SevenZipError.html#/s:13SWCompression13SevenZipErrorO9wrongSizeyA2CmF":{"name":"wrongSize","abstract":"

Size either of one of the files from the container or one of the container’s strucutures is incorrect.

","parent_name":"SevenZipError"},"Enums/SevenZipError.html#/s:13SWCompression13SevenZipErrorO20startPosNotSupportedyA2CmF":{"name":"startPosNotSupported","abstract":"

Files have StartPos property. This feature isn’t supported.

","parent_name":"SevenZipError"},"Enums/SevenZipError.html#/s:13SWCompression13SevenZipErrorO20externalNotSupportedyA2CmF":{"name":"externalNotSupported","abstract":"

External feature isn’t supported.

","parent_name":"SevenZipError"},"Enums/SevenZipError.html#/s:13SWCompression13SevenZipErrorO23multiStreamNotSupportedyA2CmF":{"name":"multiStreamNotSupported","abstract":"

Coders with multiple in and/or out streams aren’t supported.

","parent_name":"SevenZipError"},"Enums/SevenZipError.html#/s:13SWCompression13SevenZipErrorO29additionalStreamsNotSupportedyA2CmF":{"name":"additionalStreamsNotSupported","abstract":"

Additional streams feature isn’t supported.

","parent_name":"SevenZipError"},"Enums/SevenZipError.html#/s:13SWCompression13SevenZipErrorO23compressionNotSupportedyA2CmF":{"name":"compressionNotSupported","abstract":"

Entry is compressed using unsupported compression method.

","parent_name":"SevenZipError"},"Enums/SevenZipError.html#/s:13SWCompression13SevenZipErrorO22encryptionNotSupportedyA2CmF":{"name":"encryptionNotSupported","abstract":"

Entry or container’s header is encrypted. This feature isn’t supported.

","parent_name":"SevenZipError"},"Enums/SevenZipError.html#/s:13SWCompression13SevenZipErrorO017internalStructureD0yA2CmF":{"name":"internalStructureError","abstract":"

Unknown/incorrect internal 7-Zip structure was encountered or a required internal structure is missing.

","parent_name":"SevenZipError"},"Enums/LZMA2Error.html#/s:13SWCompression10LZMA2ErrorO19wrongDictionarySizeyA2CmF":{"name":"wrongDictionarySize","abstract":"

Dictionary size is too big, or has reserved bits set, or is in incorrect format in general.

","parent_name":"LZMA2Error"},"Enums/LZMA2Error.html#/s:13SWCompression10LZMA2ErrorO16wrongControlByteyA2CmF":{"name":"wrongControlByte","abstract":"

Unknown conrol byte value of LZMA2 packet.

","parent_name":"LZMA2Error"},"Enums/LZMA2Error.html#/s:13SWCompression10LZMA2ErrorO10wrongResetyA2CmF":{"name":"wrongReset","abstract":"

Unknown reset instruction encountered in LZMA2 packet.

","parent_name":"LZMA2Error"},"Enums/LZMA2Error.html#/s:13SWCompression10LZMA2ErrorO10wrongSizesyA2CmF":{"name":"wrongSizes","abstract":"

Either size of decompressed data isn’t equal to the one specified in LZMA2 packet or","parent_name":"LZMA2Error"},"Enums/LZMAError.html#/s:13SWCompression9LZMAErrorO15wrongPropertiesyA2CmF":{"name":"wrongProperties","abstract":"

Properties’ byte is greater than 225.

","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:13SWCompression9LZMAErrorO21rangeDecoderInitErroryA2CmF":{"name":"rangeDecoderInitError","abstract":"

Unable to initialize RanderDecorer.

","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:13SWCompression9LZMAErrorO24exceededUncompressedSizeyA2CmF":{"name":"exceededUncompressedSize","abstract":"

Size of uncompressed data hit specified limit in the middle of decoding.

","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:13SWCompression9LZMAErrorO13windowIsEmptyyA2CmF":{"name":"windowIsEmpty","abstract":"

Unable to perfrom repeat-distance decoding because there is nothing to repeat.

","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:13SWCompression9LZMAErrorO23rangeDecoderFinishErroryA2CmF":{"name":"rangeDecoderFinishError","abstract":"

End of stream marker is reached, but range decoder is in incorrect state.

","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:13SWCompression9LZMAErrorO16repeatWillExceedyA2CmF":{"name":"repeatWillExceed","abstract":"

The number of bytes to repeat is greater than the amount bytes that is left to decode.

","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:13SWCompression9LZMAErrorO17notEnoughToRepeatyA2CmF":{"name":"notEnoughToRepeat","abstract":"

The amount of already decoded bytes is smaller than repeat length.

","parent_name":"LZMAError"},"Enums/GzipError.html#/s:13SWCompression9GzipErrorO10wrongMagicyA2CmF":{"name":"wrongMagic","abstract":"

First two bytes (‘magic’ number) of archive isn’t 31 and 139.

","parent_name":"GzipError"},"Enums/GzipError.html#/s:13SWCompression9GzipErrorO22wrongCompressionMethodyA2CmF":{"name":"wrongCompressionMethod","abstract":"

Compression method used in archive is different from Deflate, which is the only supported one.

","parent_name":"GzipError"},"Enums/GzipError.html#/s:13SWCompression9GzipErrorO10wrongFlagsyA2CmF":{"name":"wrongFlags","abstract":"

One of the reserved fields in archive has an unexpected value, which can also mean (apart from damaged archive),","parent_name":"GzipError"},"Enums/GzipError.html#/s:13SWCompression9GzipErrorO14wrongHeaderCRCyA2CmF":{"name":"wrongHeaderCRC","abstract":"

Computed CRC of archive’s header doesn’t match the value stored in archive.

","parent_name":"GzipError"},"Enums/GzipError.html#/s:13SWCompression9GzipErrorO8wrongCRCyACSayAA0B7ArchiveC6MemberVGcACmF":{"name":"wrongCRC(_:)","abstract":"

Computed checksum of uncompressed data doesn’t match the value stored in the archive.","parent_name":"GzipError"},"Enums/GzipError.html#/s:13SWCompression9GzipErrorO10wrongISizeyA2CmF":{"name":"wrongISize","abstract":"

Computed ‘isize’ didn’t match the value stored in the archive.

","parent_name":"GzipError"},"Enums/GzipError.html#/s:13SWCompression9GzipErrorO21cannotEncodeISOLatin1yA2CmF":{"name":"cannotEncodeISOLatin1","abstract":"

Either specified file name or comment cannot be encoded using ISO Latin-1 encoding.

","parent_name":"GzipError"},"Enums/DeflateError.html#/s:13SWCompression12DeflateErrorO29wrongUncompressedBlockLengthsyA2CmF":{"name":"wrongUncompressedBlockLengths","abstract":"

Uncompressed block’s length and nlength bytes isn’t consistent with each other.

","parent_name":"DeflateError"},"Enums/DeflateError.html#/s:13SWCompression12DeflateErrorO14wrongBlockTypeyA2CmF":{"name":"wrongBlockType","abstract":"

Unknown block type (not 0, 1 or 2).

","parent_name":"DeflateError"},"Enums/DeflateError.html#/s:13SWCompression12DeflateErrorO11wrongSymbolyA2CmF":{"name":"wrongSymbol","abstract":"

Decoded symbol was found in Huffman tree but is unknown.

","parent_name":"DeflateError"},"Enums/DeflateError.html#/s:13SWCompression12DeflateErrorO14symbolNotFoundyA2CmF":{"name":"symbolNotFound","abstract":"

Symbol wasn’t found in Huffman tree.

","parent_name":"DeflateError"},"Enums/DataError.html#/s:13SWCompression9DataErrorO9truncatedyA2CmF":{"name":"truncated","abstract":"

Indicates that input data is likely truncated or incomplete.

","parent_name":"DataError"},"Enums/DataError.html#/s:13SWCompression9DataErrorO9corruptedyA2CmF":{"name":"corrupted","abstract":"

Indicates that input data is corrupted, e.g. does not conform to the format specifications or contains other","parent_name":"DataError"},"Enums/DataError.html#/s:13SWCompression9DataErrorO16checksumMismatchyACSay10Foundation0B0VGcACmF":{"name":"checksumMismatch(_:)","abstract":"

Indicates that the computed checksum of the output data does not match the stored checksum. While usually the","parent_name":"DataError"},"Enums/DataError.html#/s:13SWCompression9DataErrorO18unsupportedFeatureyA2CmF":{"name":"unsupportedFeature","abstract":"

Indicates that input data was created using a feature that is not supported by the processing function.

","parent_name":"DataError"},"Enums/BZip2Error.html#/s:13SWCompression10BZip2ErrorO10wrongMagicyA2CmF":{"name":"wrongMagic","abstract":"

‘Magic’ number is not 0x425a.

","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:13SWCompression10BZip2ErrorO12wrongVersionyA2CmF":{"name":"wrongVersion","abstract":"

BZip version is not 2.

","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:13SWCompression10BZip2ErrorO14wrongBlockSizeyA2CmF":{"name":"wrongBlockSize","abstract":"

Unsupported block size (not from ‘0’ to ‘9’).

","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:13SWCompression10BZip2ErrorO14wrongBlockTypeyA2CmF":{"name":"wrongBlockType","abstract":"

Unsupported block type (is neither ‘pi’ nor ‘sqrt(pi)’).

","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:13SWCompression10BZip2ErrorO15randomizedBlockyA2CmF":{"name":"randomizedBlock","abstract":"

Block is randomized.

","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:13SWCompression10BZip2ErrorO18wrongHuffmanGroupsyA2CmF":{"name":"wrongHuffmanGroups","abstract":"

Wrong number of Huffman tables/groups (should be between 2 and 6).

","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:13SWCompression10BZip2ErrorO13wrongSelectoryA2CmF":{"name":"wrongSelector","abstract":"

Selector is greater than the total number of Huffman tables/groups.

","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:13SWCompression10BZip2ErrorO22wrongHuffmanCodeLengthyA2CmF":{"name":"wrongHuffmanCodeLength","abstract":"

Wrong length of Huffman code (should be between 0 and 20).

","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:13SWCompression10BZip2ErrorO14symbolNotFoundyA2CmF":{"name":"symbolNotFound","abstract":"

Symbol wasn’t found in Huffman tree.

","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:13SWCompression10BZip2ErrorO8wrongCRCyAC10Foundation4DataVcACmF":{"name":"wrongCRC(_:)","abstract":"

Computed checksum of the uncompressed data does not match the value stored in the archive.","parent_name":"BZip2Error"},"Enums/BZip2Error.html":{"name":"BZip2Error","abstract":"

Represents an error which happened during BZip2 decompression."},"Enums/DataError.html":{"name":"DataError","abstract":"

Represents an error which happened during processing input data.

"},"Enums/DeflateError.html":{"name":"DeflateError","abstract":"

Represents an error which happened during Deflate compression or decompression."},"Enums/GzipError.html":{"name":"GzipError","abstract":"

Represents an error which happened while processing a GZip archive."},"Enums/LZMAError.html":{"name":"LZMAError","abstract":"

Represents an error which happened during LZMA decompression."},"Enums/LZMA2Error.html":{"name":"LZMA2Error","abstract":"

Represents an error which happened during LZMA2 decompression."},"Enums/SevenZipError.html":{"name":"SevenZipError","abstract":"

Represents an error which happened while processing a 7-Zip container."},"Enums/TarCreateError.html":{"name":"TarCreateError","abstract":"

Represents an error which happened during the creation of a new TAR container.

"},"Enums/TarError.html":{"name":"TarError","abstract":"

Represents an error which happened while processing a TAR container."},"Enums/XZError.html":{"name":"XZError","abstract":"

Represents an error which happened while unarchiving an XZ archive."},"Enums/ZipError.html":{"name":"ZipError","abstract":"

Represents an error which happened while processing a ZIP container."},"Enums/ZlibError.html":{"name":"ZlibError","abstract":"

Represents an error which happened while processing a Zlib archive."},"Enums/ZipExtraFieldLocation.html#/s:13SWCompression21ZipExtraFieldLocationO16centralDirectoryyA2CmF":{"name":"centralDirectory","abstract":"

ZIP extra field is located in container’s Central Directory.

","parent_name":"ZipExtraFieldLocation"},"Enums/ZipExtraFieldLocation.html#/s:13SWCompression21ZipExtraFieldLocationO11localHeaderyA2CmF":{"name":"localHeader","abstract":"

ZIP extra field is located in one of container’s Local Headers.

","parent_name":"ZipExtraFieldLocation"},"Protocols/ZipExtraField.html#/s:13SWCompression13ZipExtraFieldP2ids6UInt16VvpZ":{"name":"id","abstract":"

ID of extra field. Must be equal to the key of extra field in ZipContainer.customExtraFields dictionary and","parent_name":"ZipExtraField"},"Protocols/ZipExtraField.html#/s:13SWCompression13ZipExtraFieldP8locationAA0bcD8LocationOvp":{"name":"location","abstract":"

Location of extra field. Must be equal to the value of location argument of init?(_:_:location:).

","parent_name":"ZipExtraField"},"Protocols/ZipExtraField.html#/s:13SWCompression13ZipExtraFieldP4sizeSivp":{"name":"size","abstract":"

Size of extra field’s data. Must be equal to the value of the second argument of init?(_:_:location:).

","parent_name":"ZipExtraField"},"Protocols/ZipExtraField.html#/s:13SWCompression13ZipExtraFieldP__8locationxSg11BitByteData012LittleEndianG6ReaderC_SiAA0bcD8LocationOtcfc":{"name":"init(_:_:location:)","abstract":"

Creates an extra field instance reading size amount of data from byteReader.

","parent_name":"ZipExtraField"},"Protocols/ZipExtraField.html#/s:13SWCompression13ZipExtraFieldPAAE2ids6UInt16Vvp":{"name":"id","abstract":"

ID of extra field. Must be equal to the key of extra field in ZipContainer.customExtraFields dictionary and","parent_name":"ZipExtraField"},"Structs/ZipEntryInfo.html#/s:13SWCompression18ContainerEntryInfoP4nameSSvp":{"name":"name","parent_name":"ZipEntryInfo"},"Structs/ZipEntryInfo.html#/s:13SWCompression18ContainerEntryInfoP4sizeSiSgvp":{"name":"size","parent_name":"ZipEntryInfo"},"Structs/ZipEntryInfo.html#/s:13SWCompression18ContainerEntryInfoP4typeAA0bC4TypeOvp":{"name":"type","parent_name":"ZipEntryInfo"},"Structs/ZipEntryInfo.html#/s:13SWCompression12ZipEntryInfoV10accessTime10Foundation4DateVSgvp":{"name":"accessTime","abstract":"

Entry’s last access time (nil, if not available).

","parent_name":"ZipEntryInfo"},"Structs/ZipEntryInfo.html#/s:13SWCompression12ZipEntryInfoV12creationTime10Foundation4DateVSgvp":{"name":"creationTime","abstract":"

Entry’s creation time (nil, if not available).

","parent_name":"ZipEntryInfo"},"Structs/ZipEntryInfo.html#/s:13SWCompression12ZipEntryInfoV16modificationTime10Foundation4DateVSgvp":{"name":"modificationTime","abstract":"

Entry’s last modification time.

","parent_name":"ZipEntryInfo"},"Structs/ZipEntryInfo.html#/s:13SWCompression12ZipEntryInfoV11permissionsAA11PermissionsVSgvp":{"name":"permissions","abstract":"

Entry’s permissions in POSIX format.","parent_name":"ZipEntryInfo"},"Structs/ZipEntryInfo.html#/s:13SWCompression12ZipEntryInfoV7commentSSvp":{"name":"comment","abstract":"

Entry’s comment.

","parent_name":"ZipEntryInfo"},"Structs/ZipEntryInfo.html#/s:13SWCompression12ZipEntryInfoV22externalFileAttributess6UInt32Vvp":{"name":"externalFileAttributes","abstract":"

Entry’s external file attributes. ZIP internal property.","parent_name":"ZipEntryInfo"},"Structs/ZipEntryInfo.html#/s:13SWCompression12ZipEntryInfoV13dosAttributesAA03DosF0VSgvp":{"name":"dosAttributes","abstract":"

Entry’s attributes in DOS format.

","parent_name":"ZipEntryInfo"},"Structs/ZipEntryInfo.html#/s:13SWCompression12ZipEntryInfoV10isTextFileSbvp":{"name":"isTextFile","abstract":"

True, if entry is likely to be text or ASCII file.

","parent_name":"ZipEntryInfo"},"Structs/ZipEntryInfo.html#/s:13SWCompression12ZipEntryInfoV14fileSystemTypeAA04FilefG0Ovp":{"name":"fileSystemType","abstract":"

File system type of container’s origin.

","parent_name":"ZipEntryInfo"},"Structs/ZipEntryInfo.html#/s:13SWCompression12ZipEntryInfoV17compressionMethodAA011CompressionF0Ovp":{"name":"compressionMethod","abstract":"

Entry’s compression method.

","parent_name":"ZipEntryInfo"},"Structs/ZipEntryInfo.html#/s:13SWCompression12ZipEntryInfoV7ownerIDSiSgvp":{"name":"ownerID","abstract":"

ID of entry’s owner.

","parent_name":"ZipEntryInfo"},"Structs/ZipEntryInfo.html#/s:13SWCompression12ZipEntryInfoV7groupIDSiSgvp":{"name":"groupID","abstract":"

ID of the group of entry’s owner.

","parent_name":"ZipEntryInfo"},"Structs/ZipEntryInfo.html#/s:13SWCompression12ZipEntryInfoV17customExtraFieldsSayAA0bF5Field_pGvp":{"name":"customExtraFields","abstract":"

Entry’s custom extra fields from both Central Directory and Local Header.

","parent_name":"ZipEntryInfo"},"Structs/ZipEntryInfo.html#/s:13SWCompression12ZipEntryInfoV3crcs6UInt32Vvp":{"name":"crc","abstract":"

CRC32 of entry’s data.

","parent_name":"ZipEntryInfo"},"Structs/ZipEntry.html#/s:13SWCompression14ContainerEntryP4info4InfoQzvp":{"name":"info","parent_name":"ZipEntry"},"Structs/ZipEntry.html#/s:13SWCompression14ContainerEntryP4data10Foundation4DataVSgvp":{"name":"data","parent_name":"ZipEntry"},"Classes/ZipContainer.html#/s:13SWCompression12ZipContainerC17customExtraFieldsSDys6UInt16VAA0bE5Field_pXpGvpZ":{"name":"customExtraFields","abstract":"

Contains user-defined extra fields. When either ZipContainer.info(container:) or ZipContainer.open(container:)","parent_name":"ZipContainer"},"Classes/ZipContainer.html#/s:13SWCompression12ZipContainerC4open9containerSayAA0B5EntryVG10Foundation4DataV_tKFZ":{"name":"open(container:)","abstract":"

Processes ZIP container and returns an array of ZipEntry with information and data for all entries.

","parent_name":"ZipContainer"},"Classes/ZipContainer.html#/s:13SWCompression12ZipContainerC4info9containerSayAA0B9EntryInfoVG10Foundation4DataV_tKFZ":{"name":"info(container:)","abstract":"

Processes ZIP container and returns an array of ZipEntryInfo with information about entries in this container.

","parent_name":"ZipContainer"},"Classes/ZipContainer.html":{"name":"ZipContainer","abstract":"

Provides functions for work with ZIP containers.

"},"Structs/ZipEntry.html":{"name":"ZipEntry","abstract":"

Represents an entry from the ZIP container.

"},"Structs/ZipEntryInfo.html":{"name":"ZipEntryInfo","abstract":"

Provides access to information about an entry from the ZIP container.

"},"Protocols/ZipExtraField.html":{"name":"ZipExtraField","abstract":"

A type that represents an extra field from a ZIP container.

"},"Enums/ZipExtraFieldLocation.html":{"name":"ZipExtraFieldLocation","abstract":"

Location of ZIP extra field inside a container.

"},"Structs/TarEntryInfo.html#/s:13SWCompression12TarEntryInfoV4nameSSvp":{"name":"name","abstract":"

Entry’s name.

","parent_name":"TarEntryInfo"},"Structs/TarEntryInfo.html#/s:13SWCompression12TarEntryInfoV4sizeSiSgvp":{"name":"size","abstract":"

Entry’s data size.

","parent_name":"TarEntryInfo"},"Structs/TarEntryInfo.html#/s:13SWCompression18ContainerEntryInfoP4typeAA0bC4TypeOvp":{"name":"type","parent_name":"TarEntryInfo"},"Structs/TarEntryInfo.html#/s:13SWCompression12TarEntryInfoV10accessTime10Foundation4DateVSgvp":{"name":"accessTime","abstract":"

Entry’s last access time (only available for PAX format; nil otherwise).

","parent_name":"TarEntryInfo"},"Structs/TarEntryInfo.html#/s:13SWCompression12TarEntryInfoV12creationTime10Foundation4DateVSgvp":{"name":"creationTime","abstract":"

Entry’s creation time (only available for PAX format; nil otherwise).

","parent_name":"TarEntryInfo"},"Structs/TarEntryInfo.html#/s:13SWCompression12TarEntryInfoV16modificationTime10Foundation4DateVSgvp":{"name":"modificationTime","abstract":"

Entry’s last modification time.

","parent_name":"TarEntryInfo"},"Structs/TarEntryInfo.html#/s:13SWCompression18ContainerEntryInfoP11permissionsAA11PermissionsVSgvp":{"name":"permissions","parent_name":"TarEntryInfo"},"Structs/TarEntryInfo.html#/s:13SWCompression12TarEntryInfoV17compressionMethodAA011CompressionF0Ovp":{"name":"compressionMethod","abstract":"

Entry’s compression method. Always .copy for the entries of TAR containers.

","parent_name":"TarEntryInfo"},"Structs/TarEntryInfo.html#/s:13SWCompression12TarEntryInfoV7ownerIDSiSgvp":{"name":"ownerID","abstract":"

ID of entry’s owner.

","parent_name":"TarEntryInfo"},"Structs/TarEntryInfo.html#/s:13SWCompression12TarEntryInfoV7groupIDSiSgvp":{"name":"groupID","abstract":"

ID of the group of entry’s owner.

","parent_name":"TarEntryInfo"},"Structs/TarEntryInfo.html#/s:13SWCompression12TarEntryInfoV13ownerUserNameSSSgvp":{"name":"ownerUserName","abstract":"

User name of entry’s owner.

","parent_name":"TarEntryInfo"},"Structs/TarEntryInfo.html#/s:13SWCompression12TarEntryInfoV14ownerGroupNameSSSgvp":{"name":"ownerGroupName","abstract":"

Name of the group of entry’s owner.

","parent_name":"TarEntryInfo"},"Structs/TarEntryInfo.html#/s:13SWCompression12TarEntryInfoV17deviceMajorNumberSiSgvp":{"name":"deviceMajorNumber","abstract":"

Device major number (used when entry is either block or character special file).

","parent_name":"TarEntryInfo"},"Structs/TarEntryInfo.html#/s:13SWCompression12TarEntryInfoV17deviceMinorNumberSiSgvp":{"name":"deviceMinorNumber","abstract":"

Device minor number (used when entry is either block or character special file).

","parent_name":"TarEntryInfo"},"Structs/TarEntryInfo.html#/s:13SWCompression12TarEntryInfoV7charsetSSSgvp":{"name":"charset","abstract":"

Name of the character set used to encode entry’s data (only available for PAX format; nil otherwise).

","parent_name":"TarEntryInfo"},"Structs/TarEntryInfo.html#/s:13SWCompression12TarEntryInfoV7commentSSSgvp":{"name":"comment","abstract":"

Entry’s comment (only available for PAX format; nil otherwise).

","parent_name":"TarEntryInfo"},"Structs/TarEntryInfo.html#/s:13SWCompression12TarEntryInfoV8linkNameSSvp":{"name":"linkName","abstract":"

Path to a linked file for symbolic link entry.

","parent_name":"TarEntryInfo"},"Structs/TarEntryInfo.html#/s:13SWCompression12TarEntryInfoV28unknownExtendedHeaderRecordsSDyS2SGSgvp":{"name":"unknownExtendedHeaderRecords","abstract":"

All custom (unknown) records from global and local PAX extended headers. nil, if there were no headers.

","parent_name":"TarEntryInfo"},"Structs/TarEntryInfo.html#/s:13SWCompression12TarEntryInfoV4name4typeACSS_AA09ContainerC4TypeOtcfc":{"name":"init(name:type:)","abstract":"

Initializes the entry’s info with its name and type.

","parent_name":"TarEntryInfo"},"Structs/TarEntry.html#/s:13SWCompression14ContainerEntryP4info4InfoQzvp":{"name":"info","parent_name":"TarEntry"},"Structs/TarEntry.html#/s:13SWCompression8TarEntryV4data10Foundation4DataVSgvp":{"name":"data","abstract":"

Entry’s data (nil if entry is a directory or data isn’t available).

","parent_name":"TarEntry"},"Structs/TarEntry.html#/s:13SWCompression8TarEntryV4info4dataAcA0bC4InfoV_10Foundation4DataVSgtcfc":{"name":"init(info:data:)","abstract":"

Initializes the entry with its info and data. The stored info.size will also be updated to be equal to","parent_name":"TarEntry"},"Structs/TarWriter.html#/s:13SWCompression9TarWriterV10fileHandle5forceACSo06NSFileE0C_AA0B9ContainerC6FormatOtcfc":{"name":"init(fileHandle:force:)","abstract":"

Creates a new instance for writing TAR entries using the specified format into the provided fileHandle.

","parent_name":"TarWriter"},"Structs/TarWriter.html#/s:13SWCompression9TarWriterV6appendyyAA0B5EntryVKF":{"name":"append(_:)","abstract":"

Adds a new TAR entry at the end of the TAR container.

","parent_name":"TarWriter"},"Structs/TarWriter.html#/s:13SWCompression9TarWriterV8finalizeyyKF":{"name":"finalize()","abstract":"

Finalizes the TAR container by adding an EOF marker.

","parent_name":"TarWriter"},"Structs/TarReader.html#/s:13SWCompression9TarReaderV10fileHandleACSo06NSFileE0C_tcfc":{"name":"init(fileHandle:)","abstract":"

Creates a new instance for reading TAR entries from the provided fileHandle.

","parent_name":"TarReader"},"Structs/TarReader.html#/s:13SWCompression9TarReaderV7processyxxAA0B5EntryVSgKXEKlF":{"name":"process(_:)","abstract":"

Processes the next TAR entry by reading it from the container and calling the provided closure on the result. If","parent_name":"TarReader"},"Structs/TarReader.html#/s:13SWCompression9TarReaderV4readAA0B5EntryVSgyKF":{"name":"read()","abstract":"

Reads the next TAR entry from the container.

","parent_name":"TarReader"},"Classes/TarContainer/Format.html#/s:13SWCompression12TarContainerC6FormatO8prePosixyA2EmF":{"name":"prePosix","abstract":"

Pre POSIX format (aka “basic TAR format”).

","parent_name":"Format"},"Classes/TarContainer/Format.html#/s:13SWCompression12TarContainerC6FormatO5ustaryA2EmF":{"name":"ustar","abstract":"

“UStar” format introduced by POSIX IEEE P1003.1 standard.

","parent_name":"Format"},"Classes/TarContainer/Format.html#/s:13SWCompression12TarContainerC6FormatO3gnuyA2EmF":{"name":"gnu","abstract":"

“UStar”-like format with GNU extensions (e.g. special container entries for long file and link names).

","parent_name":"Format"},"Classes/TarContainer/Format.html#/s:13SWCompression12TarContainerC6FormatO3paxyA2EmF":{"name":"pax","abstract":"

“PAX” format introduced by POSIX.1-2001 standard, a set of extensions to “UStar” format.

","parent_name":"Format"},"Classes/TarContainer/Format.html":{"name":"Format","abstract":"

Represents the “format” of a TAR container: a minimal set of extensions to basic TAR format required to","parent_name":"TarContainer"},"Classes/TarContainer.html#/s:13SWCompression12TarContainerC8formatOf9containerAC6FormatO10Foundation4DataV_tKFZ":{"name":"formatOf(container:)","abstract":"

Processes TAR container and returns its “format”: a minimal set of extensions to basic TAR format required to","parent_name":"TarContainer"},"Classes/TarContainer.html#/s:13SWCompression12TarContainerC6create4from10Foundation4DataVSayAA0B5EntryVG_tFZ":{"name":"create(from:)","abstract":"

Creates a new TAR container with entries as its content and generates its Data.

","parent_name":"TarContainer"},"Classes/TarContainer.html#/s:13SWCompression12TarContainerC6create4from5force10Foundation4DataVSayAA0B5EntryVG_AC6FormatOtFZ":{"name":"create(from:force:)","abstract":"

Creates a new TAR container with entries as its content and generates its Data using the specified format.

","parent_name":"TarContainer"},"Classes/TarContainer.html#/s:13SWCompression12TarContainerC4open9containerSayAA0B5EntryVG10Foundation4DataV_tKFZ":{"name":"open(container:)","abstract":"

Processes TAR container and returns an array of TarEntry with information and data for all entries.

","parent_name":"TarContainer"},"Classes/TarContainer.html#/s:13SWCompression12TarContainerC4info9containerSayAA0B9EntryInfoVG10Foundation4DataV_tKFZ":{"name":"info(container:)","abstract":"

Processes TAR container and returns an array of TarEntryInfo with information about entries in this container.

","parent_name":"TarContainer"},"Classes/TarContainer.html":{"name":"TarContainer","abstract":"

Provides functions for work with TAR containers.

"},"Structs/TarReader.html":{"name":"TarReader","abstract":"

A type that allows to iteratively read TAR entries from a container provided by a FileHandle.

"},"Structs/TarWriter.html":{"name":"TarWriter","abstract":"

A type that allows to iteratively create TAR containers with the output being written into a FileHandle.

"},"Structs/TarEntry.html":{"name":"TarEntry","abstract":"

Represents an entry from the TAR container.

"},"Structs/TarEntryInfo.html":{"name":"TarEntryInfo","abstract":"

Provides access to information about an entry from the TAR container.

"},"Structs/SevenZipEntryInfo.html#/s:13SWCompression18ContainerEntryInfoP4nameSSvp":{"name":"name","parent_name":"SevenZipEntryInfo"},"Structs/SevenZipEntryInfo.html#/s:13SWCompression18ContainerEntryInfoP4sizeSiSgvp":{"name":"size","parent_name":"SevenZipEntryInfo"},"Structs/SevenZipEntryInfo.html#/s:13SWCompression18ContainerEntryInfoP4typeAA0bC4TypeOvp":{"name":"type","parent_name":"SevenZipEntryInfo"},"Structs/SevenZipEntryInfo.html#/s:13SWCompression18ContainerEntryInfoP10accessTime10Foundation4DateVSgvp":{"name":"accessTime","parent_name":"SevenZipEntryInfo"},"Structs/SevenZipEntryInfo.html#/s:13SWCompression18ContainerEntryInfoP12creationTime10Foundation4DateVSgvp":{"name":"creationTime","parent_name":"SevenZipEntryInfo"},"Structs/SevenZipEntryInfo.html#/s:13SWCompression18ContainerEntryInfoP16modificationTime10Foundation4DateVSgvp":{"name":"modificationTime","parent_name":"SevenZipEntryInfo"},"Structs/SevenZipEntryInfo.html#/s:13SWCompression18ContainerEntryInfoP11permissionsAA11PermissionsVSgvp":{"name":"permissions","parent_name":"SevenZipEntryInfo"},"Structs/SevenZipEntryInfo.html#/s:13SWCompression17SevenZipEntryInfoV13winAttributess6UInt32VSgvp":{"name":"winAttributes","abstract":"

Entry’s “win attributes”. 7-Zip internal property.","parent_name":"SevenZipEntryInfo"},"Structs/SevenZipEntryInfo.html#/s:13SWCompression17SevenZipEntryInfoV13dosAttributesAA03DosG0VSgvp":{"name":"dosAttributes","abstract":"

Entry’s attributes in DOS format.

","parent_name":"SevenZipEntryInfo"},"Structs/SevenZipEntryInfo.html#/s:13SWCompression17SevenZipEntryInfoV9hasStreamSbvp":{"name":"hasStream","abstract":"

True, if entry has a stream (data) inside the container. 7-Zip internal propety.

","parent_name":"SevenZipEntryInfo"},"Structs/SevenZipEntryInfo.html#/s:13SWCompression17SevenZipEntryInfoV7isEmptySbvp":{"name":"isEmpty","abstract":"

True, if entry is an empty file. 7-Zip internal property.

","parent_name":"SevenZipEntryInfo"},"Structs/SevenZipEntryInfo.html#/s:13SWCompression17SevenZipEntryInfoV6isAntiSbvp":{"name":"isAnti","abstract":"

True, if entry is an anti-file. Used in differential backups to indicate that file should be deleted.","parent_name":"SevenZipEntryInfo"},"Structs/SevenZipEntryInfo.html#/s:13SWCompression17SevenZipEntryInfoV3crcs6UInt32VSgvp":{"name":"crc","abstract":"

CRC32 of entry’s data.

","parent_name":"SevenZipEntryInfo"},"Structs/SevenZipEntry.html#/s:13SWCompression14ContainerEntryP4info4InfoQzvp":{"name":"info","parent_name":"SevenZipEntry"},"Structs/SevenZipEntry.html#/s:13SWCompression14ContainerEntryP4data10Foundation4DataVSgvp":{"name":"data","parent_name":"SevenZipEntry"},"Classes/SevenZipContainer.html#/s:13SWCompression17SevenZipContainerC4open9containerSayAA0bC5EntryVG10Foundation4DataV_tKFZ":{"name":"open(container:)","abstract":"

Processes 7-Zip container and returns an array of SevenZipEntry with information and data for all entries.

","parent_name":"SevenZipContainer"},"Classes/SevenZipContainer.html#/s:13SWCompression17SevenZipContainerC4info9containerSayAA0bC9EntryInfoVG10Foundation4DataV_tKFZ":{"name":"info(container:)","abstract":"

Processes 7-Zip container and returns an array of SevenZipEntryInfo with information about entries in this","parent_name":"SevenZipContainer"},"Classes/SevenZipContainer.html":{"name":"SevenZipContainer","abstract":"

Provides functions for work with 7-Zip containers.

"},"Structs/SevenZipEntry.html":{"name":"SevenZipEntry","abstract":"

Represents an entry from the 7-Zip container.

"},"Structs/SevenZipEntryInfo.html":{"name":"SevenZipEntryInfo","abstract":"

Provides access to information about an entry from the 7-Zip container.

"},"Structs/ZlibHeader/CompressionLevel.html#/s:13SWCompression10ZlibHeaderV16CompressionLevelO16fastestAlgorithmyA2EmF":{"name":"fastestAlgorithm","abstract":"

Fastest algorithm.

","parent_name":"CompressionLevel"},"Structs/ZlibHeader/CompressionLevel.html#/s:13SWCompression10ZlibHeaderV16CompressionLevelO13fastAlgorithmyA2EmF":{"name":"fastAlgorithm","abstract":"

Fast algorithm.

","parent_name":"CompressionLevel"},"Structs/ZlibHeader/CompressionLevel.html#/s:13SWCompression10ZlibHeaderV16CompressionLevelO16defaultAlgorithmyA2EmF":{"name":"defaultAlgorithm","abstract":"

Default algorithm.

","parent_name":"CompressionLevel"},"Structs/ZlibHeader/CompressionLevel.html#/s:13SWCompression10ZlibHeaderV16CompressionLevelO13slowAlgorithmyA2EmF":{"name":"slowAlgorithm","abstract":"

Slowest algorithm but with maximum compression.

","parent_name":"CompressionLevel"},"Structs/ZlibHeader/CompressionLevel.html":{"name":"CompressionLevel","abstract":"

Levels of compression which can be used to create Zlib archive.

","parent_name":"ZlibHeader"},"Structs/ZlibHeader.html#/s:13SWCompression10ZlibHeaderV17compressionMethodAA011CompressionE0Ovp":{"name":"compressionMethod","abstract":"

Compression method of archive. Always .deflate for Zlib archives.

","parent_name":"ZlibHeader"},"Structs/ZlibHeader.html#/s:13SWCompression10ZlibHeaderV16compressionLevelAC011CompressionE0Ovp":{"name":"compressionLevel","abstract":"

Level of compression used in archive.

","parent_name":"ZlibHeader"},"Structs/ZlibHeader.html#/s:13SWCompression10ZlibHeaderV10windowSizeSivp":{"name":"windowSize","abstract":"

Size of ‘window’: moving interval of data which was used to make archive.

","parent_name":"ZlibHeader"},"Structs/ZlibHeader.html#/s:13SWCompression10ZlibHeaderV7archiveAC10Foundation4DataV_tKcfc":{"name":"init(archive:)","abstract":"

Initializes the structure with the values from Zlib archive.

","parent_name":"ZlibHeader"},"Classes/ZlibArchive.html#/s:13SWCompression11ZlibArchiveC9unarchive7archive10Foundation4DataVAH_tKFZ":{"name":"unarchive(archive:)","abstract":"

Unarchives Zlib archive.

","parent_name":"ZlibArchive"},"Classes/ZlibArchive.html#/s:13SWCompression11ZlibArchiveC7archive4data10Foundation4DataVAH_tFZ":{"name":"archive(data:)","abstract":"

Archives data into Zlib archive. Data will be also compressed with Deflate algorithm.","parent_name":"ZlibArchive"},"Classes/XZArchive.html#/s:13SWCompression9XZArchiveC9unarchive7archive10Foundation4DataVAH_tKFZ":{"name":"unarchive(archive:)","abstract":"

Unarchives XZ archive. Archives with multiple streams are supported,","parent_name":"XZArchive"},"Classes/XZArchive.html#/s:13SWCompression9XZArchiveC14splitUnarchive7archiveSay10Foundation4DataVGAH_tKFZ":{"name":"splitUnarchive(archive:)","abstract":"

Unarchives XZ archive. Archives with multiple streams are supported,","parent_name":"XZArchive"},"Structs/GzipHeader/ExtraField.html#/s:13SWCompression10GzipHeaderV10ExtraFieldV3si1s5UInt8Vvp":{"name":"si1","abstract":"

First byte of the extra field (subfield) ID.

","parent_name":"ExtraField"},"Structs/GzipHeader/ExtraField.html#/s:13SWCompression10GzipHeaderV10ExtraFieldV3si2s5UInt8Vvp":{"name":"si2","abstract":"

Second byte of the extra field (subfield) ID.

","parent_name":"ExtraField"},"Structs/GzipHeader/ExtraField.html#/s:13SWCompression10GzipHeaderV10ExtraFieldV5bytesSays5UInt8VGvp":{"name":"bytes","abstract":"

Binary content of the extra field.

","parent_name":"ExtraField"},"Structs/GzipHeader/ExtraField.html#/s:13SWCompression10GzipHeaderV10ExtraFieldVyAEs5UInt8V_AGSayAGGtcfc":{"name":"init(_:_:_:)","abstract":"

Initializes an extra field with the specified extra field (subfield) ID bytes and its binary content.

","parent_name":"ExtraField"},"Structs/GzipHeader.html#/s:13SWCompression10GzipHeaderV17compressionMethodAA011CompressionE0Ovp":{"name":"compressionMethod","abstract":"

Compression method of archive. Always .deflate for GZip archives.

","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:13SWCompression10GzipHeaderV16modificationTime10Foundation4DateVSgvp":{"name":"modificationTime","abstract":"

The most recent modification time of the original file. If corresponding archive’s field is set to 0, which means","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:13SWCompression10GzipHeaderV6osTypeAA010FileSystemE0Ovp":{"name":"osType","abstract":"

Type of file system on which archivation took place.

","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:13SWCompression10GzipHeaderV8fileNameSSSgvp":{"name":"fileName","abstract":"

Name of the original file. If archive doesn’t contain file’s name, then nil.

","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:13SWCompression10GzipHeaderV7commentSSSgvp":{"name":"comment","abstract":"

Comment stored in archive. If archive doesn’t contain any comment, then nil.

","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:13SWCompression10GzipHeaderV10isTextFileSbvp":{"name":"isTextFile","abstract":"

True, if file is likely to be text file or ASCII-file.

","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:13SWCompression10GzipHeaderV11extraFieldsSayAC10ExtraFieldVGvp":{"name":"extraFields","abstract":"

Extra fields present in the header.

","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:13SWCompression10GzipHeaderV7archiveAC10Foundation4DataV_tKcfc":{"name":"init(archive:)","abstract":"

Initializes the structure with the values from the first ‘member’ of GZip archive.

","parent_name":"GzipHeader"},"Structs/GzipHeader/ExtraField.html":{"name":"ExtraField","abstract":"

Represents an extra field in the header of a GZip archive.

","parent_name":"GzipHeader"},"Classes/GzipArchive/Member.html#/s:13SWCompression11GzipArchiveC6MemberV6headerAA0B6HeaderVvp":{"name":"header","abstract":"

GZip header of a member.

","parent_name":"Member"},"Classes/GzipArchive/Member.html#/s:13SWCompression11GzipArchiveC6MemberV4data10Foundation4DataVvp":{"name":"data","abstract":"

Unarchived data from a member.

","parent_name":"Member"},"Classes/GzipArchive/Member.html":{"name":"Member","abstract":"

Represents the member of a multi-member GZip archive.

","parent_name":"GzipArchive"},"Classes/GzipArchive.html#/s:13SWCompression11GzipArchiveC9unarchive7archive10Foundation4DataVAH_tKFZ":{"name":"unarchive(archive:)","abstract":"

Unarchives GZip archive.

","parent_name":"GzipArchive"},"Classes/GzipArchive.html#/s:13SWCompression11GzipArchiveC14multiUnarchive7archiveSayAC6MemberVG10Foundation4DataV_tKFZ":{"name":"multiUnarchive(archive:)","abstract":"

Unarchives multi-member GZip archive.","parent_name":"GzipArchive"},"Classes/GzipArchive.html#/s:13SWCompression11GzipArchiveC7archive4data7comment8fileName14writeHeaderCRC10isTextFile6osType16modificationTime11extraFields10Foundation4DataVAO_SSSgAPS2bAA0n6SystemP0OSgAM4DateVSgSayAA0bJ0V10ExtraFieldVGtKFZ":{"name":"archive(data:comment:fileName:writeHeaderCRC:isTextFile:osType:modificationTime:extraFields:)","abstract":"

Archives data into GZip archive, using various specified options.","parent_name":"GzipArchive"},"Classes/GzipArchive.html":{"name":"GzipArchive","abstract":"

Provides unarchive and archive functions for GZip archives.

"},"Structs/GzipHeader.html":{"name":"GzipHeader","abstract":"

Represents the header of a GZip archive.

"},"Classes/XZArchive.html":{"name":"XZArchive","abstract":"

Provides unarchive function for XZ archives.

"},"Classes/ZlibArchive.html":{"name":"ZlibArchive","abstract":"

Provides unarchive and archive functions for Zlib archives.

"},"Structs/ZlibHeader.html":{"name":"ZlibHeader","abstract":"

Represents the header of a Zlib archive.

"},"Enums/LZ4.html#/s:13SWCompression3LZ4O10decompress4data10Foundation4DataVAH_tKFZ":{"name":"decompress(data:)","abstract":"

Decompresses data using LZ4 algortihm.

","parent_name":"LZ4"},"Enums/LZ4.html#/s:13SWCompression3LZ4O10decompress4data10dictionary0E2ID10Foundation4DataVAJ_AJSgs6UInt32VSgtKFZ":{"name":"decompress(data:dictionary:dictionaryID:)","abstract":"

Decompresses data using LZ4 algortihm and provided external dictionary.

","parent_name":"LZ4"},"Enums/LZ4.html#/s:13SWCompression3LZ4O15multiDecompress4data10dictionary0F2IDSay10Foundation4DataVGAJ_AJSgs6UInt32VSgtKFZ":{"name":"multiDecompress(data:dictionary:dictionaryID:)","abstract":"

Decompresses data, which may represent several concatenated LZ4 frames, using LZ4 algortihm and provided external","parent_name":"LZ4"},"Enums/LZ4.html#/s:13SWCompression3LZ4O8compress4data10Foundation4DataVAH_tFZ":{"name":"compress(data:)","abstract":"

Compresses data using LZ4 algortihm with default format and algorithm options.

","parent_name":"LZ4"},"Enums/LZ4.html#/s:13SWCompression3LZ4O8compress4data17independentBlocks14blockChecksums15contentChecksum0I4Size0gK010dictionary0L2ID10Foundation4DataVAO_S4bSiAOSgs6UInt32VSgtFZ":{"name":"compress(data:independentBlocks:blockChecksums:contentChecksum:contentSize:blockSize:dictionary:dictionaryID:)","abstract":"

Compresses data using LZ4 algortihm.

","parent_name":"LZ4"},"Classes/LZMA2.html#/s:13SWCompression5LZMA2C10decompress4data10Foundation4DataVAH_tKFZ":{"name":"decompress(data:)","abstract":"

Decompresses data using LZMA2 algortihm.

","parent_name":"LZMA2"},"Structs/LZMAProperties.html#/s:13SWCompression14LZMAPropertiesV2lcSivp":{"name":"lc","abstract":"

Number of bits used for the literal encoding context. Default value is 3.

","parent_name":"LZMAProperties"},"Structs/LZMAProperties.html#/s:13SWCompression14LZMAPropertiesV2lpSivp":{"name":"lp","abstract":"

Number of bits to include in “literal position state”. Default value is 0.

","parent_name":"LZMAProperties"},"Structs/LZMAProperties.html#/s:13SWCompression14LZMAPropertiesV2pbSivp":{"name":"pb","abstract":"

Number of bits to include in “position state”. Default value is 2.

","parent_name":"LZMAProperties"},"Structs/LZMAProperties.html#/s:13SWCompression14LZMAPropertiesV14dictionarySizeSivp":{"name":"dictionarySize","abstract":"

Size of the dictionary. Default value is 1 << 24.

","parent_name":"LZMAProperties"},"Structs/LZMAProperties.html#/s:13SWCompression14LZMAPropertiesV2lc2lp2pb14dictionarySizeACSi_S3itcfc":{"name":"init(lc:lp:pb:dictionarySize:)","abstract":"

Initializes LZMA properties with values of lc, lp, pb, and dictionary size.

","parent_name":"LZMAProperties"},"Structs/LZMAProperties.html#/s:13SWCompression14LZMAPropertiesVACycfc":{"name":"init()","abstract":"

Initializes LZMA properties with default values of lc, lp, pb, and dictionary size.

","parent_name":"LZMAProperties"},"Classes/LZMA.html#/s:13SWCompression4LZMAC10decompress4data10Foundation4DataVAH_tKFZ":{"name":"decompress(data:)","abstract":"

Decompresses data using LZMA.

","parent_name":"LZMA"},"Classes/LZMA.html#/s:13SWCompression4LZMAC10decompress4data10properties16uncompressedSize10Foundation4DataVAJ_AA14LZMAPropertiesVSiSgtKFZ":{"name":"decompress(data:properties:uncompressedSize:)","abstract":"

Decompresses data using LZMA with specified algorithm’s properties, and, optionally, output’s","parent_name":"LZMA"},"Classes/Deflate.html#/s:13SWCompression7DeflateC10decompress4data10Foundation4DataVAH_tKFZ":{"name":"decompress(data:)","abstract":"

Decompresses data using Deflate algortihm.

","parent_name":"Deflate"},"Classes/Deflate.html#/s:13SWCompression7DeflateC8compress4data10Foundation4DataVAH_tFZ":{"name":"compress(data:)","abstract":"

Compresses data with Deflate algortihm.

","parent_name":"Deflate"},"Classes/BZip2/BlockSize.html#/s:13SWCompression5BZip2C9BlockSizeO3oneyA2EmF":{"name":"one","abstract":"

100 KB.

","parent_name":"BlockSize"},"Classes/BZip2/BlockSize.html#/s:13SWCompression5BZip2C9BlockSizeO3twoyA2EmF":{"name":"two","abstract":"

200 KB.

","parent_name":"BlockSize"},"Classes/BZip2/BlockSize.html#/s:13SWCompression5BZip2C9BlockSizeO5threeyA2EmF":{"name":"three","abstract":"

300 KB.

","parent_name":"BlockSize"},"Classes/BZip2/BlockSize.html#/s:13SWCompression5BZip2C9BlockSizeO4fouryA2EmF":{"name":"four","abstract":"

400 KB.

","parent_name":"BlockSize"},"Classes/BZip2/BlockSize.html#/s:13SWCompression5BZip2C9BlockSizeO4fiveyA2EmF":{"name":"five","abstract":"

500 KB.

","parent_name":"BlockSize"},"Classes/BZip2/BlockSize.html#/s:13SWCompression5BZip2C9BlockSizeO3sixyA2EmF":{"name":"six","abstract":"

600 KB.

","parent_name":"BlockSize"},"Classes/BZip2/BlockSize.html#/s:13SWCompression5BZip2C9BlockSizeO5sevenyA2EmF":{"name":"seven","abstract":"

700 KB.

","parent_name":"BlockSize"},"Classes/BZip2/BlockSize.html#/s:13SWCompression5BZip2C9BlockSizeO5eightyA2EmF":{"name":"eight","abstract":"

800 KB.

","parent_name":"BlockSize"},"Classes/BZip2/BlockSize.html#/s:13SWCompression5BZip2C9BlockSizeO4nineyA2EmF":{"name":"nine","abstract":"

900 KB.

","parent_name":"BlockSize"},"Classes/BZip2.html#/s:13SWCompression5BZip2C10decompress4data10Foundation4DataVAH_tKFZ":{"name":"decompress(data:)","abstract":"

Decompresses data using BZip2 algortihm.

","parent_name":"BZip2"},"Classes/BZip2.html#/s:13SWCompression5BZip2C15multiDecompress4dataSay10Foundation4DataVGAH_tKFZ":{"name":"multiDecompress(data:)","abstract":"

Decompresses one or more concatenated BZip2 archives found in data.

","parent_name":"BZip2"},"Classes/BZip2/BlockSize.html":{"name":"BlockSize","abstract":"

Represents the size of the blocks in which data is split during BZip2 compression.

","parent_name":"BZip2"},"Classes/BZip2.html#/s:13SWCompression5BZip2C8compress4data10Foundation4DataVAH_tFZ":{"name":"compress(data:)","abstract":"

Compresses data with BZip2 algortihm.

","parent_name":"BZip2"},"Classes/BZip2.html#/s:13SWCompression5BZip2C8compress4data9blockSize10Foundation4DataVAI_AC05BlockF0OtFZ":{"name":"compress(data:blockSize:)","abstract":"

Compresses data with BZip2 algortihm, splitting data into blocks of specified blockSize.

","parent_name":"BZip2"},"Classes/BZip2.html":{"name":"BZip2","abstract":"

Provides functions for compression and decompression for BZip2 algorithm.

"},"Classes/Deflate.html":{"name":"Deflate","abstract":"

Provides functions for compression and decompression for Deflate algorithm.

"},"Classes/LZMA.html":{"name":"LZMA","abstract":"

Provides decompression function for LZMA.

"},"Structs/LZMAProperties.html":{"name":"LZMAProperties","abstract":"

Properties of LZMA. This API is intended to be used by advanced users.

"},"Classes/LZMA2.html":{"name":"LZMA2","abstract":"

Provides decompression function for LZMA2 algorithm.

"},"Enums/LZ4.html":{"name":"LZ4","abstract":"

Provides functions for compression and decompression for LZ4 algorithm.

"},"Compression.html":{"name":"Compression"},"Archives.html":{"name":"Archives"},"7-Zip.html":{"name":"7-Zip"},"TAR.html":{"name":"TAR"},"ZIP.html":{"name":"ZIP"},"Errors.html":{"name":"Errors"},"Protocols.html":{"name":"Protocols"},"Common%20Auxiliary%20Types.html":{"name":"Common Auxiliary Types"}} \ No newline at end of file diff --git a/docsets/SWCompression.docset/Contents/Resources/Documents/undocumented.json b/docsets/SWCompression.docset/Contents/Resources/Documents/undocumented.json new file mode 100644 index 00000000..f42809e0 --- /dev/null +++ b/docsets/SWCompression.docset/Contents/Resources/Documents/undocumented.json @@ -0,0 +1,4 @@ +{ + "warnings": [], + "source_directory": "/Users/runner/work/1/s" +} \ No newline at end of file diff --git a/docsets/SWCompression.docset/Contents/Resources/docSet.dsidx b/docsets/SWCompression.docset/Contents/Resources/docSet.dsidx new file mode 100644 index 0000000000000000000000000000000000000000..012cc2c6cd825a8ae14cdc9cd39a4e7e4aed610c GIT binary patch literal 90112 zcmeHw33waFb?`38T@nBZNVaGirfEv1X^PfC00d7(mLc#kO-Y~xiMlLNAPAC>a0vh@ zQNFrx(_BrP9=Y1oZFAH;ax`tOw&{^JNsk=O(KBhj}Z3=8t;Cr3|7i>-Ko^DJuP2^S1u8|Ben8~* zbV!F{K&8a;YGyTGPi#J~3YX%$)h%)dI;5!>kTn`B#B-5sJeG(i>xy;A2%X~2-7j)I z9nz77WF~fPEAaZYkSWgS9$1>4Qg<#MT@0s_>vPdu0=ILdkXwxv^8MqPe6Uc+B^Fi- z@x0~29MCnJ8)49bp|$LVOS?tR(AD~oqOd6VE($)so-f2x^#M;|QSkRs z@N1dmYARkI@DvsSAM1q8)G75S%f2oc)Llf7%-<_=9i7r1ztbel0jc!-czn z)4?R&$bo*lPFTDuFuD-h$!hB)`?D?s8C5_L1WR}6h&7eVtY+&+ECP-at4%|!I$@#2 zQgO`hQi)X`6ognRf~7lk#0uX4A)tQ5BH$>o?$8jcPFUoXgl=}>@CYfO1A-rC>+xF^KKb*ys(^D-1H0#Y~)L+5HbaZ^X9$pi?wL}V;` zDdf!#LSoPmnu2dsz?J_;zK>M98Ea`7NHNp-cAlmPk4On%D)SHUN z66r!Fzfupnj4IG5lC!+X-Ps{^EJX_&f``lZuHpgsxwGhmpKfUhezr>E@Y5l6!O!MA z{Adcp53$$Qx|g#%cc2=;+4?@`j@E&eftEMApK}d6f5!EO=8w96k>Aa|yW!V`*Ek(5 zZ*B>?L$0ql|JL;i(e7MtzSc0?^sxPPj?<2J*uT?whs)b|y}3#Jj6DF*w({Rq5wHI| zyQ=FbQhKMiTrd^f|9cliy#DiBc>jMeDdP2?SFSAe9FBT(q3ft8BjWX+SMTZd#8!I$ zf8Yrbum8O9hF({!7We<|yolF-UVBTgD_)cP|NRRhUjKP^V>e1ax{JN#!Yq6L-*Z{S z>p#Cm_y658_$|8scgf(l=>C7-qKMajbu-mv0@PhZM8(c4B3}RbExZ5Un-lT+&zF@& zYg|ee_y3L+T)6$bl{~sRY#N#Lo@EiQ|Gf6XZk(j5g48y#L>Q z1y@@q-R)a(|8Lh5t3KCeg;?s<`7SN7>V(C3|8LU}t3D_U_y1jbV%6u`tPo4R|KF)4 zR-LdI@Bepbh*cjHhWr1{3wVmO^P9W>gOJx)Jl`Zud7fRi$?S0NVzdw)i)B)1lNnor zd%+2?L5-1p_$a8w1@0fAGcIX|IMFGcv8|@Br876u6E_QSFf}exN}h_xGP%XPQF#D(37qNlQl@P0 zlvZ>8k#Yzk|Jg zEP%j*p-5yNreIW=*H8f0Wf-;N+@H1nGUr?-i{lRXY0rtH9a0}3PseiWS)9canL=bW zo6Y13@kO1Gc_ERV$mKFQt9ck<4Z?oEIXEi0pLDmuVo+8lbfWQ=*yoX^_4`gX60nVO zA(>d%aHD7%={HL0G7Ub8E0f22Ws8$2;?)^E4Izx7t@BdzT%A8UC_%Ua7(=Qo|7a=y;F{bkdeo7S5qo4UkriXReRFBZfL z;$Gpq!k-9l60Qn;jo)efMB~plb~L=Uq09EX?H>NU{2YvVqkla@S4W=>s8PtoGRb@d z?B=iqmH#JOjh_W5hicp&M}*OikPX&bDwEzFT)mk{CZf6Z-N+9ZHuIMh^~o*2AS{S` zJklOpG@FIfVDG#MCp?RGFH5d73cQlGm>Z%%K!>QFKQoiuUrSDLszW-?M;8|pNZx1? z_-s6y%3HF!NPI1xX6($0-+>c`wprLeS{4D_2+13`8>ej1SPXnOP&zPf1w@MuALWlc zZL2w-R|RL}bn!WI*8TE^cxyOwD!}_8$%X^IRA#^m6*nBULCu8}nysJ@-;f%y4>4Y) z5+k~@(+u7=Wr<%~H--)hdpw71$hxV>Ll1j)7wBK*LJ(Azno2f*ma ze&_pj@ac!Y_n^?(Hb6ckXN?Y-B3W?H`Gp?O5z>sU2m`5%JB0h)hlEbgu=0s{bJ~gD z@d-Wc1iC67p)9V@E0I-R&@X=5Biz~1X}d5zE3;?#i@f1aJRo$m`E2Jd7-mR*KtKPP zeL`3JC^Ryg9pxzn*u7uq@{HOPmZl$w@|XhtKT6|MVVlBl^n}norl5Z6MMA%4TK&MBB+7^EHO0mSgkDcj z|FNDpx(_MF|2-u1x2qV<$IQM{-qLUX2N;3pFt1TL>CtIkkPi;}1&?ROc08V10B<(p z*2Ok~=EB)e-_tR54hempkPXE?nS&-kj3A%VpZR|MJNnrae(D&i6*xoMLc|uyN`5{eBrbfLS z&r(gr$>`w$+_1b(KdkSp?iGQ2;GodccE~m^+uQXVMf;Sr=3dh)bhHn$=DIa0H>N|I zm=;Dm&+>RbQw-|CA*? zH6M}oM~8*}wh3sjkd=CZXa{L{MZW6~2?yFP;XR7^Tpt73KZ&0)#-|E!z#a6>2nb%7 z5C%IVTHIx(R0Be3MZiq-3EdqBv^|lJIn5Uo-(y~oASY}`iPLc67MV!4!H-@5$BKUC z75yMcxi5KVSS;!@(vzZFdv5}vkD5Ve2mZz= zhD)02@sPXVcP^lvey0sIuDR8$QO&343nt?jRa%5c6%h1x%e~|ZdKvVARep;+gPLx) z*}s7LvVAZhWlLLX4RCsuYm5ouGz!uI3wV@_k!KKTup*?&gqOoyqN*s5KLuLq{!VEI zR){ic$|pgqiT=ia+G0yqWV8J*jg$TMDpD(07o$!X&vb+dacIZK*f*w@A^D5}Y zB=&;)^@@7|0@KEu6Rjvpt4e4=d-2B=&xR^YS(wTAI@ft+OdG2$Q-T8YQ51 zsYTF}0UInU>XB_SxIucv>xVb0z%uFB^gPVs;8B!1VEtl;LSXp=FOXG*pV1D<-B1tv zkje%0GLK2W{9d!xv-*CT^bV{(Gm{tm3G7ghfkJYJYMSs8GpKA|>dO-c7;{Wa8q>=D zCSx6z--jw09ngC)gE)QVaaKR;=F|jyM=zrnQ3v8fOL+-bsGdVJyEZZJyq(w}x~#x! znW`n*)3aU`JduY!`8f8!-3o!qF)hJ+)i!f_;QU=ugE$D*2U|>LOUDy=NKh49L0gB; z+@^?CR%kSWmk&GzDVJm5*1_x>UDwW$_o#PnDi(y;Pwu4);=T^>ksu%8r7rSl&_6h& zL$6g@nk_>4eHa)QqE?|$ndKszCGcg1I0xe*sA-lcs7Qp&(kEU>2TZVHfcGbeBe1@6 z(d4*kge%H_B`S5R$@Ke7n}=a$4LD@c`secEFi4`dSTvo^K!`A!Zl@#RW8iv`_UUF4 z7h_pLbW~{(_WMlX$vCA25u+~nE%d_|Z;I_G=q;>69I0{DsN2e@9Wq&=KJ6~_dDW?y z8zjJCd*lZ(QgCE$3Pj8uFN9O=_m_(iae(r9RS&2k>H*~&GP*$dd~s!Gxy-}=$kYpsnfZ)$mDJN|z={@;obn?tvLt?2x4BPSl={y`v@xpfeKglX%Dd%m+|LZL; z)eves{@<8#%^0J<9sf^L(HZHonfQN`Om{}`1CU36Dy#7Rzn6Q0bHCQ@b-mvead}$5 z*!u3)r&?!PezoO3=lh(~j?X(T+COPO()=6ESDL=t^h(J7_a3oN_!Z$9AuO~te!B6M zjUn&|xMceu+be8$@UQ0m+-Csb#{VvbNq)9A5{fYw&tXnJokp&5%dn5ebI3sG$mULv zybP@bJX&ySggvSNpm3wdMXs+y^2m>u)6v3eu2$d}c?OX!k%SC}qIlw%$b~wj0nk{I zII)mHw>gonImT$X3`~mr#tcc>7bG1EE+*r-0e^|sUGGh8qE^%d+sKn6g943vsV0l) z+pj++a;U2%h&6U9>NBLx@mLLZzt0pN9qXlOk?RH(KWQ>aH1zsa!Xk#OxW0Cn6cL3& z!Dk*7Ij~~%8GC>(Ts7nIL#(Ji7z)8rg!w6v!+0rU3)x+(W*U|amwI$k;K1+B+?|fu zDcSF`Zg=Ao0te1snz>gjn(TY_8(q{Cp9rNDnWjg^1rA*6O11gLttOA-^Q;A?t@1K$Uk^k`I0qezcn9`_74RGNF_L0ktf%akBHoWN19qqM``Hm zUimk(xvNOD4qzsmbC}^9RbVmwL+Rc`lPsu;CC3rq3mz$vfYr7at?(qvYAJ4I?3Q~* zX)zl>VBiiV0|Qkxbt|2xF25J1O1ncl)A%sy%q8$AOV_P42+X82CvRDG}`gH0C zq@d&;frZ#9WsIhq`gf(&I%M#kpfPJw(=bVcxJ<&$L8Q_~%ULa^>Ivi5f;X-%xhD-n zBvE4Q1q~ou8YF9cFb@)7-6ti0P$LOk38?_V6Dok8K>hI`R50-^$T8__*~I~Z&Zi9v zuG{P?LBf*TPqHGef|Cll2EX7wNYdRtk?Z#q8x|GseTzPs%Oh6X-|shX50R28ChDbT z*mmGmMo&nu7o>)^Bl>6#)kR+aob+R;U*N#8UL(m==2w64puj=U(yYq)^br@D7X*+0 zfWSeJhAt38|Ap=q`DSE4NKtJD83^51)Dh_qBz#A{T;500DGsoN5?ZO#;u8}Y#niw! zEW@PIZtfv+fjp95Pc3AUiCDdJ!TbDL$P{P14>FK;NWMHc>c#cB_%=DVAqtYBS>8)& zn2Rs3Cc*!;o-~wUQbc(Fe}MaS&iyj?U9RU{{??DQUTOI*Wcr(Ne$Dx#&i#&$InLSt z%l^am&gS25KGXD-rb3e_zDn#DJ}R7Q{Hw-u4IgQkv3<;TlK(qC&)*4vw*KGcJRB>K z3z1xM@M5pe=x7LeGh13-wN2PZuTumLCCTNS2L36i#Gs#M^;@#qD}+zrQ21A`lM8mQ zd`W|wM<#g`{CISeTrHL%BQ%ODn}s_AyAX~mF1t9|O`)So5j{YP@m7XhK@UML%y^C_ z4S>w|s39R?UfP9RlM}udy@U;*$GsHylWBtch{2jVE_U{|Bq*jxK1e`UHIHKOfumDY$!p*Bh^>PRt zsK_#`GjgvPTp4qMV$K($xx#Fw-sv*DW^gIy=nBzzb}Ni=^K)%fe$FqG(kqZvA5~DN zLYv1h!a&h66qZEJ2kB7BQyN2SrW&qk|M(~_9aM@n87Dg3ewlJ+I^EhZnyPnmi{t

>B# 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%0AxWOaIZd^We_Dy zg<@)QyWO>r&xCD0;Azb~ZN5BY!^oIElEIPZ1{*g)$j!2miTvCt;^#Lv4Edc1F{?X| z?&T}%98&?!IX1K{kY)G9Y|T?_BD@vYlzn#GY^03a1q6aCCA{N9hku?7tr4KqVxJ!| z@`qj5102HLtS=RKf8Zs*P_Saq`Li@c2#|7A+`dIn!N*HxkJU~Lg_7;jw)oj3W!S%* zqs`#%Shu`%uZ~#a%#IO|QIfYFk_+i{(_*wu!*0o8w5e*{J9AGuZ&sr`wM@%gQb_A` zSMP{s~6T++6`oC!12Wz{3#>{G<;`XXwr>=J48)B z;MnFXI|QgNaBT?067OXOuZ11So6$oMCxodRYt^PHE)@NsSVkM4B>Gl5f5p?Hu$YoC z(;M+Jz&D-)G4J{%YD%3Xiz6wn zK*OS%cYD}xxg82;#l$($oXFLf`vyFt$#MWqTn%ADUsY!YvPW#f z73flB$f!HG=t?FG8jO9s3c1)`gbpH#h-upbpr|md+SCHs{L9dMc1hI^M5JJ0)vkFB zNb&Tfo7fRlQV8|gb5ax9w4AveJ0)JzEuBI4UyU!(CLH(d80L@toKw54OVL}BS^l>0 zJ<5p1LT-{t&dOKRrTrhw>k|4(81Kf`%3KjBKNujF_+768>6elx*cQOXq{_yWRT@;g zCg*xmd-S8HMOc!eQb3ZMVhCjEh&$)%;YgJoZK>Ff_e;#>HTzWUS-1)4n z#m6GpDto)AVsrcvCe%HxJO@=kaVIV$?qb(T_X%pmD?4}fm)JnllV9ZMEJzkLB@@F4 zdqW`9WtIuNPn$bEcHOD^Bt{pndIrg!ElvaN>1k8$5}7LI$1E0Qn79&gu_zqvAzmyK zF;7)|QYpHKeWw09wT$-{99T+J7B)nZ32Thd4aGnj?$GR#WfUnc zT@FGj%L=c#Ni?a1mC=R#B%rjqed0MMt}{p2=%(hJcx_EdE&KaSfIOk-nP;wx6t&)Mc$=RYw@^2Lo5msKn&$JLaSKbPMESCehE;%=lfd|aIZ zEv0znqQ^Wf!_-Tc@U=D6>^nB6h|O2{F)^eWiZj+JYiMa2BXLr&nQ~8N)PT?N9|9GE zMLYYuq(M$^!X`RjK9FA?fi-0O;f>0s|Q zYTR2wlvP;qEO_feuoW*5Y^tE(dY<1i#A&2{>DO_T%M~lNbOsz}|LOCfP0sA2z|!$! zgG*Fvef)`s6b|jT{8Dgpr+}Z&m>79=!O)ym0wS`r;03B1!**nW8?gUvDLDRl1`S6# z9<_EPVg^aN1quB}+>|0M-9<~?czwird#(!dQM&1~X?$XH8(H1>W8P;mGhoa@!JAQM zg{{dTzx{oXv%C%^qLf|Tx#vf|b2^ce|k%npT@VDv}&RjfBW| zK)BX&9PqGGl<}g#Fg+G*TppV}982Y^!U2uOqH#?}^U%|+ztK^d zhGWTCgBpGxakiLjWwyeKeoBowPFN?f{1xoa4P51s;r~j>XTjLr)dWIp!8%^=Bms)(~h;m_U( zXNixk28L}0LS5-jKyq@#2gyS|J&f#pGCLkTc<@2s1dqeyqJ*Rc0tSIETAgmODY;(s z2y|Mcp&2}7rpBprBBB~1qM1`N+}4SoxYVPqsXi&l`rxZp{(w0iSy$Nv5*Vy!RapG^ S^0y4=eg;ohKbLh*2~7a!Pg}VF literal 0 HcmV?d00001 diff --git a/img/dash.png b/img/dash.png new file mode 100755 index 0000000000000000000000000000000000000000..6f694c7a012b417908da3687a0a39aa182e91c74 GIT binary patch literal 1338 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 literal 0 HcmV?d00001 diff --git a/index.html b/index.html new file mode 100644 index 00000000..ba2637dd --- /dev/null +++ b/index.html @@ -0,0 +1,492 @@ + + + + SWCompression Reference + + + + + + + + + + + + + + + +

+

+ + SWCompression 4.9.1 Docs + + (100% documented) +

+ +
+
+ +
+
+ +

+ + GitHub + View on GitHub + +

+ +
+ + + +
+ +
+ +
+
+ +

SWCompression

+ +

Swift 5.9+ +GitHub license +Build Status

+ +

A framework with (de)compression algorithms and functions for working with various archives and containers.

+

What is this?

+ +

SWCompression is a framework with a collection of functions for:

+ +
    +
  1. Decompression (and sometimes compression) using different algorithms.
  2. +
  3. Reading (and sometimes writing) archives of different formats.
  4. +
  5. Reading (and sometimes writing) containers such as ZIP, TAR and 7-Zip.
  6. +
+ +

It also works on Apple platforms, Linux, and Windows.

+ +

All features are listed in the tables below. “TBD” means that feature is planned but not implemented (yet).

+ + + + + + + + + + + + + + + + + + + + + + + + +
DeflateBZip2LZMA/LZMA2LZ4
Decompression
CompressionTBD
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ZlibGZipXZZIPTAR7-Zip
Read
WriteTBDTBDTBD
+ +

Also, SWCompression is written with Swift only.

+

Installation

+ +

SWCompression can be integrated into your project using Swift Package Manager.

+ +

Note: SWCompression versions 4.8.6 and earlier were also made available via CocoaPods or Carthage.

+ +

To install with Swift Package manager, add SWCompression to you package dependencies and specify it as a dependency for +your target, e.g.:

+
import PackageDescription
+
+let package = Package(
+    name: "PackageName",
+    dependencies: [
+        .package(name: "SWCompression", url: "https://github.com/tsolomko/SWCompression.git",
+                 from: "4.9.0")
+    ],
+    targets: [
+        .target(
+            name: "TargetName",
+            dependencies: ["SWCompression"]
+        )
+    ]
+)
+
+ +

More details you can find in Swift Package Manager’s Documentation.

+

Usage

+

Basic Example

+ +

For example, if you want to decompress “deflated” data just use:

+
// let data = <Your compressed data>
+let decompressedData = try? Deflate.decompress(data: data)
+
+ +

However, it is unlikely that you will encounter deflated data outside of any archive. So, in the case of GZip archive +you should use:

+
let decompressedData = try? GzipArchive.unarchive(archive: data)
+
+

Handling Errors

+ +

Most SWCompression functions can throw errors and you are responsible for handling them. If you look at the list of +available error types and their cases, you may be frightened by their number. However, most of the cases (such as +XZError.wrongMagic) exist for diagnostic purposes.

+ +

Thus, you only need to handle the most common type of error for your archive/algorithm. For example:

+
do {
+    // let data = <Your compressed data>
+    let decompressedData = try XZArchive.unarchive(archive: data)
+} catch let error as XZError {
+    // <handle XZ related error here>
+} catch let error {
+    // <handle all other errors here>
+}
+
+

Documentation

+ +

Every function or type of SWCompression’s public API is documented. This documentation can be found at its own +website or via a slightly shorter link: +swcompression.tsolomko.me

+

Sophisticated example

+ +

There is a small command-line program, “swcomp”, which is included in this repository in “Sources/swcomp”. It can be +built using Swift Package Manager (only available on macOS).

+ +

IMPORTANT: The “swcomp” command-line tool is NOT intended for general use.

+

Contributing

+ +

Whether you find a bug, have a suggestion, idea, feedback or something else, please +create an issue on GitHub. If you have any questions, you can ask +them on the Discussions page.

+ +

In the case of a bug, it will be especially helpful if you attach a file (archive, etc.) that caused the bug to occur.

+ +

If you’d like to contribute, please create a pull request on GitHub.

+

Executing tests locally

+ +

If you want to run tests on your computer, you need to do a couple of additional steps after cloning the repository:

+
git submodule update --init --recursive
+cd "Tests/Test Files"
+cp gitattributes-copy .gitattributes
+git lfs pull
+git lfs checkout
+
+ +

These commands will download the files used in tests which are stored in a +separate repository using Git LFS. There are two reasons for +this complicated setup. Firstly, some of these files can be quite big, and it would be unfortunate if the users of +SWCompression had to download them during the installation. Secondly, Swift Package Manager and contemporary versions of +Xcode don’t always work well with git-lfs-enabled repositories. To prevent any potential problems test files were moved +into another repository.

+ +

Please note, that if you want to add a new type of test files, in addition to running git lfs track, you have to +also copy into the “Tests/Test Files/gitattributes-copy” file a line this command adds to the “Tests/Test Files/.gitattributes” +file. Do not commit the “.gitattributes” file to the git history. It is git-ignored for a reason!

+ +

Please also be mindful of Git LFS bandwidth quota on GitHub: try to limit downloading lfs’d files using git lfs pull. +In CI we use some caching techniques to help with the quota, so if you’re going to add new tests that require several +new test files you should try to submit them all together to reduce the amount of times CI needs to recreate the cache +(recreating the cache requires to do git lfs pull for all test files).

+

Performance

+ +

Using whole module optimizations is recommended for the best performance. They are enabled by default in the Release build +configuration.

+ +

Tests Results document contains results of benchmarking of various functions.

+

Why?

+ +

First of all, existing solutions for working with compression, archives and containers have certain disadvantages. They +might not support a particular compression algorithm or archive format and they all have different APIs, which sometimes +can be slightly confusing for users, especially when you mix different libraries in one project. This project attempts to +provide missing (and sometimes existing) functionality through the unified API which is easy to use and remember.

+ +

Secondly, in some cases it may be important to have a compression framework written entirely in Swift, without relying +on either system libraries or solutions implemented in other languages. Additionaly, since SWCompression is written +completely in Swift without Objective-C, it can also be used on Linux, and Windows.

+

Future plans

+ +
    +
  • Performance…
  • +
  • Better Deflate compression.
  • +
  • Something else…
  • +
+

License

+ +

MIT licensed

+

References

+ + + +
+
+ + +
+
+ + + diff --git a/js/jazzy.js b/js/jazzy.js new file mode 100755 index 00000000..1ac86992 --- /dev/null +++ b/js/jazzy.js @@ -0,0 +1,74 @@ +// Jazzy - https://github.com/realm/jazzy +// Copyright Realm Inc. +// SPDX-License-Identifier: MIT + +window.jazzy = {'docset': false} +if (typeof window.dash != 'undefined') { + document.documentElement.className += ' dash' + window.jazzy.docset = true +} +if (navigator.userAgent.match(/xcode/i)) { + document.documentElement.className += ' xcode' + window.jazzy.docset = true +} + +function toggleItem($link, $content) { + var animationDuration = 300; + $link.toggleClass('token-open'); + $content.slideToggle(animationDuration); +} + +function itemLinkToContent($link) { + return $link.parent().parent().next(); +} + +// On doc load + hash-change, open any targeted item +function openCurrentItemIfClosed() { + if (window.jazzy.docset) { + return; + } + var $link = $(`a[name="${location.hash.substring(1)}"]`).nextAll('.token'); + $content = itemLinkToContent($link); + if ($content.is(':hidden')) { + toggleItem($link, $content); + } +} + +$(openCurrentItemIfClosed); +$(window).on('hashchange', openCurrentItemIfClosed); + +// On item link ('token') click, toggle its discussion +$('.token').on('click', function(event) { + if (window.jazzy.docset) { + return; + } + var $link = $(this); + toggleItem($link, itemLinkToContent($link)); + + // Keeps the document from jumping to the hash. + var href = $link.attr('href'); + if (history.pushState) { + history.pushState({}, '', href); + } else { + location.hash = href; + } + event.preventDefault(); +}); + +// Clicks on links to the current, closed, item need to open the item +$("a:not('.token')").on('click', function() { + if (location == this.href) { + openCurrentItemIfClosed(); + } +}); + +// KaTeX rendering +if ("katex" in window) { + $($('.math').each( (_, element) => { + katex.render(element.textContent, element, { + displayMode: $(element).hasClass('m-block'), + throwOnError: false, + trust: true + }); + })) +} diff --git a/js/jazzy.search.js b/js/jazzy.search.js new file mode 100644 index 00000000..359cdbb8 --- /dev/null +++ b/js/jazzy.search.js @@ -0,0 +1,74 @@ +// Jazzy - https://github.com/realm/jazzy +// Copyright Realm Inc. +// SPDX-License-Identifier: MIT + +$(function(){ + var $typeahead = $('[data-typeahead]'); + var $form = $typeahead.parents('form'); + var searchURL = $form.attr('action'); + + function displayTemplate(result) { + return result.name; + } + + function suggestionTemplate(result) { + var t = '
'; + t += '' + result.name + ''; + if (result.parent_name) { + t += '' + result.parent_name + ''; + } + t += '
'; + return t; + } + + $typeahead.one('focus', function() { + $form.addClass('loading'); + + $.getJSON(searchURL).then(function(searchData) { + const searchIndex = lunr(function() { + this.ref('url'); + this.field('name'); + this.field('abstract'); + for (const [url, doc] of Object.entries(searchData)) { + this.add({url: url, name: doc.name, abstract: doc.abstract}); + } + }); + + $typeahead.typeahead( + { + highlight: true, + minLength: 3, + autoselect: true + }, + { + limit: 10, + display: displayTemplate, + templates: { suggestion: suggestionTemplate }, + source: function(query, sync) { + const lcSearch = query.toLowerCase(); + const results = searchIndex.query(function(q) { + q.term(lcSearch, { boost: 100 }); + q.term(lcSearch, { + boost: 10, + wildcard: lunr.Query.wildcard.TRAILING + }); + }).map(function(result) { + var doc = searchData[result.ref]; + doc.url = result.ref; + return doc; + }); + sync(results); + } + } + ); + $form.removeClass('loading'); + $typeahead.trigger('focus'); + }); + }); + + var baseURL = searchURL.slice(0, -"search.json".length); + + $typeahead.on('typeahead:select', function(e, result) { + window.location = baseURL + result.url; + }); +}); diff --git a/js/jquery.min.js b/js/jquery.min.js new file mode 100644 index 00000000..7f37b5d9 --- /dev/null +++ b/js/jquery.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="",le.option=!!xe.lastChild;var ke={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n",""]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="
",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 00){var c=e.utils.clone(r)||{};c.position=[a,l],c.index=s.length,s.push(new e.Token(i.slice(a,o),c))}a=o+1}}return s},e.tokenizer.separator=/[\s\-]+/,e.Pipeline=function(){this._stack=[]},e.Pipeline.registeredFunctions=Object.create(null),e.Pipeline.registerFunction=function(t,r){r in this.registeredFunctions&&e.utils.warn("Overwriting existing registered function: "+r),t.label=r,e.Pipeline.registeredFunctions[t.label]=t},e.Pipeline.warnIfFunctionNotRegistered=function(t){var r=t.label&&t.label in this.registeredFunctions;r||e.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",t)},e.Pipeline.load=function(t){var r=new e.Pipeline;return t.forEach(function(t){var i=e.Pipeline.registeredFunctions[t];if(!i)throw new Error("Cannot load unregistered function: "+t);r.add(i)}),r},e.Pipeline.prototype.add=function(){var t=Array.prototype.slice.call(arguments);t.forEach(function(t){e.Pipeline.warnIfFunctionNotRegistered(t),this._stack.push(t)},this)},e.Pipeline.prototype.after=function(t,r){e.Pipeline.warnIfFunctionNotRegistered(r);var i=this._stack.indexOf(t);if(i==-1)throw new Error("Cannot find existingFn");i+=1,this._stack.splice(i,0,r)},e.Pipeline.prototype.before=function(t,r){e.Pipeline.warnIfFunctionNotRegistered(r);var i=this._stack.indexOf(t);if(i==-1)throw new Error("Cannot find existingFn");this._stack.splice(i,0,r)},e.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);t!=-1&&this._stack.splice(t,1)},e.Pipeline.prototype.run=function(e){for(var t=this._stack.length,r=0;r1&&(se&&(r=n),s!=e);)i=r-t,n=t+Math.floor(i/2),s=this.elements[2*n];return s==e?2*n:s>e?2*n:sa?l+=2:o==a&&(t+=r[u+1]*i[l+1],u+=2,l+=2);return t},e.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},e.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,r=0;t0){var o,a=s.str.charAt(0);a in s.node.edges?o=s.node.edges[a]:(o=new e.TokenSet,s.node.edges[a]=o),1==s.str.length&&(o["final"]=!0),n.push({node:o,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(0!=s.editsRemaining){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new e.TokenSet;s.node.edges["*"]=u}if(0==s.str.length&&(u["final"]=!0),n.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&n.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),1==s.str.length&&(s.node["final"]=!0),s.str.length>=1){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new e.TokenSet;s.node.edges["*"]=l}1==s.str.length&&(l["final"]=!0),n.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var c,h=s.str.charAt(0),d=s.str.charAt(1);d in s.node.edges?c=s.node.edges[d]:(c=new e.TokenSet,s.node.edges[d]=c),1==s.str.length&&(c["final"]=!0),n.push({node:c,editsRemaining:s.editsRemaining-1,str:h+s.str.slice(2)})}}}return i},e.TokenSet.fromString=function(t){for(var r=new e.TokenSet,i=r,n=0,s=t.length;n=e;t--){var r=this.uncheckedNodes[t],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r["char"]]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}},e.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},e.Index.prototype.search=function(t){return this.query(function(r){var i=new e.QueryParser(t,r);i.parse()})},e.Index.prototype.query=function(t){for(var r=new e.Query(this.fields),i=Object.create(null),n=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),u=0;u1?this._b=1:this._b=e},e.Builder.prototype.k1=function(e){this._k1=e},e.Builder.prototype.add=function(t,r){var i=t[this._ref],n=Object.keys(this._fields);this._documents[i]=r||{},this.documentCount+=1;for(var s=0;s=this.length)return e.QueryLexer.EOS;var t=this.str.charAt(this.pos);return this.pos+=1,t},e.QueryLexer.prototype.width=function(){return this.pos-this.start},e.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},e.QueryLexer.prototype.backup=function(){this.pos-=1},e.QueryLexer.prototype.acceptDigitRun=function(){var t,r;do t=this.next(),r=t.charCodeAt(0);while(r>47&&r<58);t!=e.QueryLexer.EOS&&this.backup()},e.QueryLexer.prototype.more=function(){return this.pos1&&(t.backup(),t.emit(e.QueryLexer.TERM)),t.ignore(),t.more())return e.QueryLexer.lexText},e.QueryLexer.lexEditDistance=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.EDIT_DISTANCE),e.QueryLexer.lexText},e.QueryLexer.lexBoost=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.BOOST),e.QueryLexer.lexText},e.QueryLexer.lexEOS=function(t){t.width()>0&&t.emit(e.QueryLexer.TERM)},e.QueryLexer.termSeparator=e.tokenizer.separator,e.QueryLexer.lexText=function(t){for(;;){var r=t.next();if(r==e.QueryLexer.EOS)return e.QueryLexer.lexEOS;if(92!=r.charCodeAt(0)){if(":"==r)return e.QueryLexer.lexField;if("~"==r)return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexEditDistance;if("^"==r)return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexBoost;if("+"==r&&1===t.width())return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if("-"==r&&1===t.width())return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if(r.match(e.QueryLexer.termSeparator))return e.QueryLexer.lexTerm}else t.escapeCharacter()}},e.QueryParser=function(t,r){this.lexer=new e.QueryLexer(t),this.query=r,this.currentClause={},this.lexemeIdx=0},e.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var t=e.QueryParser.parseClause;t;)t=t(this);return this.query},e.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},e.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},e.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},e.QueryParser.parseClause=function(t){var r=t.peekLexeme();if(void 0!=r)switch(r.type){case e.QueryLexer.PRESENCE:return e.QueryParser.parsePresence;case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var i="expected either a field or a term, found "+r.type;throw r.str.length>=1&&(i+=" with value '"+r.str+"'"),new e.QueryParseError(i,r.start,r.end)}},e.QueryParser.parsePresence=function(t){var r=t.consumeLexeme();if(void 0!=r){switch(r.str){case"-":t.currentClause.presence=e.Query.presence.PROHIBITED;break;case"+":t.currentClause.presence=e.Query.presence.REQUIRED;break;default:var i="unrecognised presence operator'"+r.str+"'";throw new e.QueryParseError(i,r.start,r.end)}var n=t.peekLexeme();if(void 0==n){var i="expecting term or field, found nothing";throw new e.QueryParseError(i,r.start,r.end)}switch(n.type){case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var i="expecting term or field, found '"+n.type+"'";throw new e.QueryParseError(i,n.start,n.end)}}},e.QueryParser.parseField=function(t){var r=t.consumeLexeme();if(void 0!=r){if(t.query.allFields.indexOf(r.str)==-1){var i=t.query.allFields.map(function(e){return"'"+e+"'"}).join(", "),n="unrecognised field '"+r.str+"', possible fields: "+i;throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.fields=[r.str];var s=t.peekLexeme();if(void 0==s){var n="expecting term, found nothing";throw new e.QueryParseError(n,r.start,r.end)}switch(s.type){case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var n="expecting term, found '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},e.QueryParser.parseTerm=function(t){var r=t.consumeLexeme();if(void 0!=r){t.currentClause.term=r.str.toLowerCase(),r.str.indexOf("*")!=-1&&(t.currentClause.usePipeline=!1);var i=t.peekLexeme();if(void 0==i)return void t.nextClause();switch(i.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+i.type+"'";throw new e.QueryParseError(n,i.start,i.end)}}},e.QueryParser.parseEditDistance=function(t){var r=t.consumeLexeme();if(void 0!=r){var i=parseInt(r.str,10);if(isNaN(i)){var n="edit distance must be numeric";throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.editDistance=i;var s=t.peekLexeme();if(void 0==s)return void t.nextClause();switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},e.QueryParser.parseBoost=function(t){var r=t.consumeLexeme();if(void 0!=r){var i=parseInt(r.str,10);if(isNaN(i)){var n="boost must be numeric";throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.boost=i;var s=t.peekLexeme();if(void 0==s)return void t.nextClause();switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():e.lunr=t()}(this,function(){return e})}(); diff --git a/js/typeahead.jquery.js b/js/typeahead.jquery.js new file mode 100644 index 00000000..bcb734be --- /dev/null +++ b/js/typeahead.jquery.js @@ -0,0 +1,1695 @@ +/*! + * typeahead.js 1.3.3 + * https://github.com/corejavascript/typeahead.js + * Copyright 2013-2024 Twitter, Inc. and other contributors; Licensed MIT + */ + + +(function(root, factory) { + if (typeof define === "function" && define.amd) { + define([ "jquery" ], function(a0) { + return factory(a0); + }); + } else if (typeof module === "object" && module.exports) { + module.exports = factory(require("jquery")); + } else { + factory(root["jQuery"]); + } +})(this, function($) { + var _ = function() { + "use strict"; + return { + isMsie: function() { + return /(msie|trident)/i.test(navigator.userAgent) ? navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2] : false; + }, + isBlankString: function(str) { + return !str || /^\s*$/.test(str); + }, + escapeRegExChars: function(str) { + return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); + }, + isString: function(obj) { + return typeof obj === "string"; + }, + isNumber: function(obj) { + return typeof obj === "number"; + }, + isArray: $.isArray, + isFunction: $.isFunction, + isObject: $.isPlainObject, + isUndefined: function(obj) { + return typeof obj === "undefined"; + }, + isElement: function(obj) { + return !!(obj && obj.nodeType === 1); + }, + isJQuery: function(obj) { + return obj instanceof $; + }, + toStr: function toStr(s) { + return _.isUndefined(s) || s === null ? "" : s + ""; + }, + bind: $.proxy, + each: function(collection, cb) { + $.each(collection, reverseArgs); + function reverseArgs(index, value) { + return cb(value, index); + } + }, + map: $.map, + filter: $.grep, + every: function(obj, test) { + var result = true; + if (!obj) { + return result; + } + $.each(obj, function(key, val) { + if (!(result = test.call(null, val, key, obj))) { + return false; + } + }); + return !!result; + }, + some: function(obj, test) { + var result = false; + if (!obj) { + return result; + } + $.each(obj, function(key, val) { + if (result = test.call(null, val, key, obj)) { + return false; + } + }); + return !!result; + }, + mixin: $.extend, + identity: function(x) { + return x; + }, + clone: function(obj) { + return $.extend(true, {}, obj); + }, + getIdGenerator: function() { + var counter = 0; + return function() { + return counter++; + }; + }, + templatify: function templatify(obj) { + return $.isFunction(obj) ? obj : template; + function template() { + return String(obj); + } + }, + defer: function(fn) { + setTimeout(fn, 0); + }, + debounce: function(func, wait, immediate) { + var timeout, result; + return function() { + var context = this, args = arguments, later, callNow; + later = function() { + timeout = null; + if (!immediate) { + result = func.apply(context, args); + } + }; + callNow = immediate && !timeout; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + if (callNow) { + result = func.apply(context, args); + } + return result; + }; + }, + throttle: function(func, wait) { + var context, args, timeout, result, previous, later; + previous = 0; + later = function() { + previous = new Date(); + timeout = null; + result = func.apply(context, args); + }; + return function() { + var now = new Date(), remaining = wait - (now - previous); + context = this; + args = arguments; + if (remaining <= 0) { + clearTimeout(timeout); + timeout = null; + previous = now; + result = func.apply(context, args); + } else if (!timeout) { + timeout = setTimeout(later, remaining); + } + return result; + }; + }, + stringify: function(val) { + return _.isString(val) ? val : JSON.stringify(val); + }, + guid: function() { + function _p8(s) { + var p = (Math.random().toString(16) + "000000000").substr(2, 8); + return s ? "-" + p.substr(0, 4) + "-" + p.substr(4, 4) : p; + } + return "tt-" + _p8() + _p8(true) + _p8(true) + _p8(); + }, + noop: function() {} + }; + }(); + var WWW = function() { + "use strict"; + var defaultClassNames = { + wrapper: "twitter-typeahead", + input: "tt-input", + hint: "tt-hint", + menu: "tt-menu", + dataset: "tt-dataset", + suggestion: "tt-suggestion", + selectable: "tt-selectable", + empty: "tt-empty", + open: "tt-open", + cursor: "tt-cursor", + highlight: "tt-highlight" + }; + return build; + function build(o) { + var www, classes; + classes = _.mixin({}, defaultClassNames, o); + www = { + css: buildCss(), + classes: classes, + html: buildHtml(classes), + selectors: buildSelectors(classes) + }; + return { + css: www.css, + html: www.html, + classes: www.classes, + selectors: www.selectors, + mixin: function(o) { + _.mixin(o, www); + } + }; + } + function buildHtml(c) { + return { + wrapper: '', + menu: '
' + }; + } + function buildSelectors(classes) { + var selectors = {}; + _.each(classes, function(v, k) { + selectors[k] = "." + v; + }); + return selectors; + } + function buildCss() { + var css = { + wrapper: { + position: "relative", + display: "inline-block" + }, + hint: { + position: "absolute", + top: "0", + left: "0", + borderColor: "transparent", + boxShadow: "none", + opacity: "1" + }, + input: { + position: "relative", + verticalAlign: "top", + backgroundColor: "transparent" + }, + inputWithNoHint: { + position: "relative", + verticalAlign: "top" + }, + menu: { + position: "absolute", + top: "100%", + left: "0", + zIndex: "100", + display: "none" + }, + ltr: { + left: "0", + right: "auto" + }, + rtl: { + left: "auto", + right: " 0" + } + }; + if (_.isMsie()) { + _.mixin(css.input, { + backgroundImage: "url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)" + }); + } + return css; + } + }(); + var EventBus = function() { + "use strict"; + var namespace, deprecationMap; + namespace = "typeahead:"; + deprecationMap = { + render: "rendered", + cursorchange: "cursorchanged", + select: "selected", + autocomplete: "autocompleted" + }; + function EventBus(o) { + if (!o || !o.el) { + $.error("EventBus initialized without el"); + } + this.$el = $(o.el); + } + _.mixin(EventBus.prototype, { + _trigger: function(type, args) { + var $e = $.Event(namespace + type); + this.$el.trigger.call(this.$el, $e, args || []); + return $e; + }, + before: function(type) { + var args, $e; + args = [].slice.call(arguments, 1); + $e = this._trigger("before" + type, args); + return $e.isDefaultPrevented(); + }, + trigger: function(type) { + var deprecatedType; + this._trigger(type, [].slice.call(arguments, 1)); + if (deprecatedType = deprecationMap[type]) { + this._trigger(deprecatedType, [].slice.call(arguments, 1)); + } + } + }); + return EventBus; + }(); + var EventEmitter = function() { + "use strict"; + var splitter = /\s+/, nextTick = getNextTick(); + return { + onSync: onSync, + onAsync: onAsync, + off: off, + trigger: trigger + }; + function on(method, types, cb, context) { + var type; + if (!cb) { + return this; + } + types = types.split(splitter); + cb = context ? bindContext(cb, context) : cb; + this._callbacks = this._callbacks || {}; + while (type = types.shift()) { + this._callbacks[type] = this._callbacks[type] || { + sync: [], + async: [] + }; + this._callbacks[type][method].push(cb); + } + return this; + } + function onAsync(types, cb, context) { + return on.call(this, "async", types, cb, context); + } + function onSync(types, cb, context) { + return on.call(this, "sync", types, cb, context); + } + function off(types) { + var type; + if (!this._callbacks) { + return this; + } + types = types.split(splitter); + while (type = types.shift()) { + delete this._callbacks[type]; + } + return this; + } + function trigger(types) { + var type, callbacks, args, syncFlush, asyncFlush; + if (!this._callbacks) { + return this; + } + types = types.split(splitter); + args = [].slice.call(arguments, 1); + while ((type = types.shift()) && (callbacks = this._callbacks[type])) { + syncFlush = getFlush(callbacks.sync, this, [ type ].concat(args)); + asyncFlush = getFlush(callbacks.async, this, [ type ].concat(args)); + syncFlush() && nextTick(asyncFlush); + } + return this; + } + function getFlush(callbacks, context, args) { + return flush; + function flush() { + var cancelled; + for (var i = 0, len = callbacks.length; !cancelled && i < len; i += 1) { + cancelled = callbacks[i].apply(context, args) === false; + } + return !cancelled; + } + } + function getNextTick() { + var nextTickFn; + if (window.setImmediate) { + nextTickFn = function nextTickSetImmediate(fn) { + setImmediate(function() { + fn(); + }); + }; + } else { + nextTickFn = function nextTickSetTimeout(fn) { + setTimeout(function() { + fn(); + }, 0); + }; + } + return nextTickFn; + } + function bindContext(fn, context) { + return fn.bind ? fn.bind(context) : function() { + fn.apply(context, [].slice.call(arguments, 0)); + }; + } + }(); + var highlight = function(doc) { + "use strict"; + var defaults = { + node: null, + pattern: null, + tagName: "strong", + className: null, + wordsOnly: false, + caseSensitive: false, + diacriticInsensitive: false + }; + var accented = { + A: "[AaªÀ-Åà-åĀ-ąǍǎȀ-ȃȦȧᴬᵃḀḁẚẠ-ảₐ℀℁℻⒜Ⓐⓐ㍱-㍴㎀-㎄㎈㎉㎩-㎯㏂㏊㏟㏿Aa]", + B: "[BbᴮᵇḂ-ḇℬ⒝Ⓑⓑ㍴㎅-㎇㏃㏈㏔㏝Bb]", + C: "[CcÇçĆ-čᶜ℀ℂ℃℅℆ℭⅭⅽ⒞Ⓒⓒ㍶㎈㎉㎝㎠㎤㏄-㏇Cc]", + D: "[DdĎďDŽ-džDZ-dzᴰᵈḊ-ḓⅅⅆⅮⅾ⒟Ⓓⓓ㋏㍲㍷-㍹㎗㎭-㎯㏅㏈Dd]", + E: "[EeÈ-Ëè-ëĒ-ěȄ-ȇȨȩᴱᵉḘ-ḛẸ-ẽₑ℡ℯℰⅇ⒠Ⓔⓔ㉐㋍㋎Ee]", + F: "[FfᶠḞḟ℉ℱ℻⒡Ⓕⓕ㎊-㎌㎙ff-fflFf]", + G: "[GgĜ-ģǦǧǴǵᴳᵍḠḡℊ⒢Ⓖⓖ㋌㋍㎇㎍-㎏㎓㎬㏆㏉㏒㏿Gg]", + H: "[HhĤĥȞȟʰᴴḢ-ḫẖℋ-ℎ⒣Ⓗⓗ㋌㍱㎐-㎔㏊㏋㏗Hh]", + I: "[IiÌ-Ïì-ïĨ-İIJijǏǐȈ-ȋᴵᵢḬḭỈ-ịⁱℐℑℹⅈⅠ-ⅣⅥ-ⅨⅪⅫⅰ-ⅳⅵ-ⅸⅺⅻ⒤Ⓘⓘ㍺㏌㏕fiffiIi]", + J: "[JjIJ-ĵLJ-njǰʲᴶⅉ⒥ⒿⓙⱼJj]", + K: "[KkĶķǨǩᴷᵏḰ-ḵK⒦Ⓚⓚ㎄㎅㎉㎏㎑㎘㎞㎢㎦㎪㎸㎾㏀㏆㏍-㏏Kk]", + L: "[LlĹ-ŀLJ-ljˡᴸḶḷḺ-ḽℒℓ℡Ⅼⅼ⒧Ⓛⓛ㋏㎈㎉㏐-㏓㏕㏖㏿flfflLl]", + M: "[MmᴹᵐḾ-ṃ℠™ℳⅯⅿ⒨Ⓜⓜ㍷-㍹㎃㎆㎎㎒㎖㎙-㎨㎫㎳㎷㎹㎽㎿㏁㏂㏎㏐㏔-㏖㏘㏙㏞㏟Mm]", + N: "[NnÑñŃ-ʼnNJ-njǸǹᴺṄ-ṋⁿℕ№⒩Ⓝⓝ㎁㎋㎚㎱㎵㎻㏌㏑Nn]", + O: "[OoºÒ-Öò-öŌ-őƠơǑǒǪǫȌ-ȏȮȯᴼᵒỌ-ỏₒ℅№ℴ⒪Ⓞⓞ㍵㏇㏒㏖Oo]", + P: "[PpᴾᵖṔ-ṗℙ⒫Ⓟⓟ㉐㍱㍶㎀㎊㎩-㎬㎰㎴㎺㏋㏗-㏚Pp]", + Q: "[Qqℚ⒬Ⓠⓠ㏃Qq]", + R: "[RrŔ-řȐ-ȓʳᴿᵣṘ-ṛṞṟ₨ℛ-ℝ⒭Ⓡⓡ㋍㍴㎭-㎯㏚㏛Rr]", + S: "[SsŚ-šſȘșˢṠ-ṣ₨℁℠⒮Ⓢⓢ㎧㎨㎮-㎳㏛㏜stSs]", + T: "[TtŢ-ťȚțᵀᵗṪ-ṱẗ℡™⒯Ⓣⓣ㉐㋏㎔㏏ſtstTt]", + U: "[UuÙ-Üù-üŨ-ųƯưǓǔȔ-ȗᵁᵘᵤṲ-ṷỤ-ủ℆⒰Ⓤⓤ㍳㍺Uu]", + V: "[VvᵛᵥṼ-ṿⅣ-Ⅷⅳ-ⅷ⒱Ⓥⓥⱽ㋎㍵㎴-㎹㏜㏞Vv]", + W: "[WwŴŵʷᵂẀ-ẉẘ⒲Ⓦⓦ㎺-㎿㏝Ww]", + X: "[XxˣẊ-ẍₓ℻Ⅸ-Ⅻⅸ-ⅻ⒳Ⓧⓧ㏓Xx]", + Y: "[YyÝýÿŶ-ŸȲȳʸẎẏẙỲ-ỹ⒴Ⓨⓨ㏉Yy]", + Z: "[ZzŹ-žDZ-dzᶻẐ-ẕℤℨ⒵Ⓩⓩ㎐-㎔Zz]" + }; + return function hightlight(o) { + var regex; + o = _.mixin({}, defaults, o); + if (!o.node || !o.pattern) { + return; + } + o.pattern = _.isArray(o.pattern) ? o.pattern : [ o.pattern ]; + regex = getRegex(o.pattern, o.caseSensitive, o.wordsOnly, o.diacriticInsensitive); + traverse(o.node, hightlightTextNode); + function hightlightTextNode(textNode) { + var match, patternNode, wrapperNode; + if (match = regex.exec(textNode.data)) { + wrapperNode = doc.createElement(o.tagName); + o.className && (wrapperNode.className = o.className); + patternNode = textNode.splitText(match.index); + patternNode.splitText(match[0].length); + wrapperNode.appendChild(patternNode.cloneNode(true)); + textNode.parentNode.replaceChild(wrapperNode, patternNode); + } + return !!match; + } + function traverse(el, hightlightTextNode) { + var childNode, TEXT_NODE_TYPE = 3; + for (var i = 0; i < el.childNodes.length; i++) { + childNode = el.childNodes[i]; + if (childNode.nodeType === TEXT_NODE_TYPE) { + i += hightlightTextNode(childNode) ? 1 : 0; + } else { + traverse(childNode, hightlightTextNode); + } + } + } + }; + function accent_replacer(chr) { + return accented[chr.toUpperCase()] || chr; + } + function getRegex(patterns, caseSensitive, wordsOnly, diacriticInsensitive) { + var escapedPatterns = [], regexStr; + for (var i = 0, len = patterns.length; i < len; i++) { + var escapedWord = _.escapeRegExChars(patterns[i]); + if (diacriticInsensitive) { + escapedWord = escapedWord.replace(/\S/g, accent_replacer); + } + escapedPatterns.push(escapedWord); + } + regexStr = wordsOnly ? "\\b(" + escapedPatterns.join("|") + ")\\b" : "(" + escapedPatterns.join("|") + ")"; + return caseSensitive ? new RegExp(regexStr) : new RegExp(regexStr, "i"); + } + }(window.document); + var Input = function() { + "use strict"; + var specialKeyCodeMap; + specialKeyCodeMap = { + 9: "tab", + 27: "esc", + 37: "left", + 39: "right", + 13: "enter", + 38: "up", + 40: "down" + }; + function Input(o, www) { + var id; + o = o || {}; + if (!o.input) { + $.error("input is missing"); + } + www.mixin(this); + this.$hint = $(o.hint); + this.$input = $(o.input); + this.$menu = $(o.menu); + id = this.$input.attr("id") || _.guid(); + this.$menu.attr("id", id + "_listbox"); + this.$hint.attr({ + "aria-hidden": true + }); + this.$input.attr({ + "aria-owns": id + "_listbox", + "aria-controls": id + "_listbox", + role: "combobox", + "aria-autocomplete": "list", + "aria-expanded": false + }); + this.query = this.$input.val(); + this.queryWhenFocused = this.hasFocus() ? this.query : null; + this.$overflowHelper = buildOverflowHelper(this.$input); + this._checkLanguageDirection(); + if (this.$hint.length === 0) { + this.setHint = this.getHint = this.clearHint = this.clearHintIfInvalid = _.noop; + } + this.onSync("cursorchange", this._updateDescendent); + } + Input.normalizeQuery = function(str) { + return _.toStr(str).replace(/^\s*/g, "").replace(/\s{2,}/g, " "); + }; + _.mixin(Input.prototype, EventEmitter, { + _onBlur: function onBlur() { + this.resetInputValue(); + this.trigger("blurred"); + }, + _onFocus: function onFocus() { + this.queryWhenFocused = this.query; + this.trigger("focused"); + }, + _onKeydown: function onKeydown($e) { + var keyName = specialKeyCodeMap[$e.which || $e.keyCode]; + this._managePreventDefault(keyName, $e); + if (keyName && this._shouldTrigger(keyName, $e)) { + this.trigger(keyName + "Keyed", $e); + } + }, + _onInput: function onInput() { + this._setQuery(this.getInputValue()); + this.clearHintIfInvalid(); + this._checkLanguageDirection(); + }, + _managePreventDefault: function managePreventDefault(keyName, $e) { + var preventDefault; + switch (keyName) { + case "up": + case "down": + preventDefault = !withModifier($e); + break; + + default: + preventDefault = false; + } + preventDefault && $e.preventDefault(); + }, + _shouldTrigger: function shouldTrigger(keyName, $e) { + var trigger; + switch (keyName) { + case "tab": + trigger = !withModifier($e); + break; + + default: + trigger = true; + } + return trigger; + }, + _checkLanguageDirection: function checkLanguageDirection() { + var dir = (this.$input.css("direction") || "ltr").toLowerCase(); + if (this.dir !== dir) { + this.dir = dir; + this.$hint.attr("dir", dir); + this.trigger("langDirChanged", dir); + } + }, + _setQuery: function setQuery(val, silent) { + var areEquivalent, hasDifferentWhitespace; + areEquivalent = areQueriesEquivalent(val, this.query); + hasDifferentWhitespace = areEquivalent ? this.query.length !== val.length : false; + this.query = val; + if (!silent && !areEquivalent) { + this.trigger("queryChanged", this.query); + } else if (!silent && hasDifferentWhitespace) { + this.trigger("whitespaceChanged", this.query); + } + }, + _updateDescendent: function updateDescendent(event, id) { + this.$input.attr("aria-activedescendant", id); + }, + bind: function() { + var that = this, onBlur, onFocus, onKeydown, onInput; + onBlur = _.bind(this._onBlur, this); + onFocus = _.bind(this._onFocus, this); + onKeydown = _.bind(this._onKeydown, this); + onInput = _.bind(this._onInput, this); + this.$input.on("blur.tt", onBlur).on("focus.tt", onFocus).on("keydown.tt", onKeydown); + if (!_.isMsie() || _.isMsie() > 9) { + this.$input.on("input.tt", onInput); + } else { + this.$input.on("keydown.tt keypress.tt cut.tt paste.tt", function($e) { + if (specialKeyCodeMap[$e.which || $e.keyCode]) { + return; + } + _.defer(_.bind(that._onInput, that, $e)); + }); + } + return this; + }, + focus: function focus() { + this.$input.focus(); + }, + blur: function blur() { + this.$input.blur(); + }, + getLangDir: function getLangDir() { + return this.dir; + }, + getQuery: function getQuery() { + return this.query || ""; + }, + setQuery: function setQuery(val, silent) { + this.setInputValue(val); + this._setQuery(val, silent); + }, + hasQueryChangedSinceLastFocus: function hasQueryChangedSinceLastFocus() { + return this.query !== this.queryWhenFocused; + }, + getInputValue: function getInputValue() { + return this.$input.val(); + }, + setInputValue: function setInputValue(value) { + this.$input.val(value); + this.clearHintIfInvalid(); + this._checkLanguageDirection(); + }, + resetInputValue: function resetInputValue() { + this.setInputValue(this.query); + }, + getHint: function getHint() { + return this.$hint.val(); + }, + setHint: function setHint(value) { + this.$hint.val(value); + }, + clearHint: function clearHint() { + this.setHint(""); + }, + clearHintIfInvalid: function clearHintIfInvalid() { + var val, hint, valIsPrefixOfHint, isValid; + val = this.getInputValue(); + hint = this.getHint(); + valIsPrefixOfHint = val !== hint && hint.indexOf(val) === 0; + isValid = val !== "" && valIsPrefixOfHint && !this.hasOverflow(); + !isValid && this.clearHint(); + }, + hasFocus: function hasFocus() { + return this.$input.is(":focus"); + }, + hasOverflow: function hasOverflow() { + var constraint = this.$input.width() - 2; + this.$overflowHelper.text(this.getInputValue()); + return this.$overflowHelper.width() >= constraint; + }, + isCursorAtEnd: function() { + var valueLength, selectionStart, range; + valueLength = this.$input.val().length; + selectionStart = this.$input[0].selectionStart; + if (_.isNumber(selectionStart)) { + return selectionStart === valueLength; + } else if (document.selection) { + range = document.selection.createRange(); + range.moveStart("character", -valueLength); + return valueLength === range.text.length; + } + return true; + }, + destroy: function destroy() { + this.$hint.off(".tt"); + this.$input.off(".tt"); + this.$overflowHelper.remove(); + this.$hint = this.$input = this.$overflowHelper = $("
"); + }, + setAriaExpanded: function setAriaExpanded(value) { + this.$input.attr("aria-expanded", value); + } + }); + return Input; + function buildOverflowHelper($input) { + return $('').css({ + position: "absolute", + visibility: "hidden", + whiteSpace: "pre", + fontFamily: $input.css("font-family"), + fontSize: $input.css("font-size"), + fontStyle: $input.css("font-style"), + fontVariant: $input.css("font-variant"), + fontWeight: $input.css("font-weight"), + wordSpacing: $input.css("word-spacing"), + letterSpacing: $input.css("letter-spacing"), + textIndent: $input.css("text-indent"), + textRendering: $input.css("text-rendering"), + textTransform: $input.css("text-transform") + }).insertAfter($input); + } + function areQueriesEquivalent(a, b) { + return Input.normalizeQuery(a) === Input.normalizeQuery(b); + } + function withModifier($e) { + return $e.altKey || $e.ctrlKey || $e.metaKey || $e.shiftKey; + } + }(); + var Dataset = function() { + "use strict"; + var keys, nameGenerator; + keys = { + dataset: "tt-selectable-dataset", + val: "tt-selectable-display", + obj: "tt-selectable-object" + }; + nameGenerator = _.getIdGenerator(); + function Dataset(o, www) { + o = o || {}; + o.templates = o.templates || {}; + o.templates.notFound = o.templates.notFound || o.templates.empty; + if (!o.source) { + $.error("missing source"); + } + if (!o.node) { + $.error("missing node"); + } + if (o.name && !isValidName(o.name)) { + $.error("invalid dataset name: " + o.name); + } + www.mixin(this); + this.highlight = !!o.highlight; + this.name = _.toStr(o.name || nameGenerator()); + this.limit = o.limit || 5; + this.displayFn = getDisplayFn(o.display || o.displayKey); + this.templates = getTemplates(o.templates, this.displayFn); + this.source = o.source.__ttAdapter ? o.source.__ttAdapter() : o.source; + this.async = _.isUndefined(o.async) ? this.source.length > 2 : !!o.async; + this._resetLastSuggestion(); + this.$el = $(o.node).attr("role", "presentation").addClass(this.classes.dataset).addClass(this.classes.dataset + "-" + this.name); + } + Dataset.extractData = function extractData(el) { + var $el = $(el); + if ($el.data(keys.obj)) { + return { + dataset: $el.data(keys.dataset) || "", + val: $el.data(keys.val) || "", + obj: $el.data(keys.obj) || null + }; + } + return null; + }; + _.mixin(Dataset.prototype, EventEmitter, { + _overwrite: function overwrite(query, suggestions) { + suggestions = suggestions || []; + if (suggestions.length) { + this._renderSuggestions(query, suggestions); + } else if (this.async && this.templates.pending) { + this._renderPending(query); + } else if (!this.async && this.templates.notFound) { + this._renderNotFound(query); + } else { + this._empty(); + } + this.trigger("rendered", suggestions, false, this.name); + }, + _append: function append(query, suggestions) { + suggestions = suggestions || []; + if (suggestions.length && this.$lastSuggestion.length) { + this._appendSuggestions(query, suggestions); + } else if (suggestions.length) { + this._renderSuggestions(query, suggestions); + } else if (!this.$lastSuggestion.length && this.templates.notFound) { + this._renderNotFound(query); + } + this.trigger("rendered", suggestions, true, this.name); + }, + _renderSuggestions: function renderSuggestions(query, suggestions) { + var $fragment; + $fragment = this._getSuggestionsFragment(query, suggestions); + this.$lastSuggestion = $fragment.children().last(); + this.$el.html($fragment).prepend(this._getHeader(query, suggestions)).append(this._getFooter(query, suggestions)); + }, + _appendSuggestions: function appendSuggestions(query, suggestions) { + var $fragment, $lastSuggestion; + $fragment = this._getSuggestionsFragment(query, suggestions); + $lastSuggestion = $fragment.children().last(); + this.$lastSuggestion.after($fragment); + this.$lastSuggestion = $lastSuggestion; + }, + _renderPending: function renderPending(query) { + var template = this.templates.pending; + this._resetLastSuggestion(); + template && this.$el.html(template({ + query: query, + dataset: this.name + })); + }, + _renderNotFound: function renderNotFound(query) { + var template = this.templates.notFound; + this._resetLastSuggestion(); + template && this.$el.html(template({ + query: query, + dataset: this.name + })); + }, + _empty: function empty() { + this.$el.empty(); + this._resetLastSuggestion(); + }, + _getSuggestionsFragment: function getSuggestionsFragment(query, suggestions) { + var that = this, fragment; + fragment = document.createDocumentFragment(); + _.each(suggestions, function getSuggestionNode(suggestion) { + var $el, context; + context = that._injectQuery(query, suggestion); + $el = $(that.templates.suggestion(context)).data(keys.dataset, that.name).data(keys.obj, suggestion).data(keys.val, that.displayFn(suggestion)).addClass(that.classes.suggestion + " " + that.classes.selectable); + fragment.appendChild($el[0]); + }); + this.highlight && highlight({ + className: this.classes.highlight, + node: fragment, + pattern: query + }); + return $(fragment); + }, + _getFooter: function getFooter(query, suggestions) { + return this.templates.footer ? this.templates.footer({ + query: query, + suggestions: suggestions, + dataset: this.name + }) : null; + }, + _getHeader: function getHeader(query, suggestions) { + return this.templates.header ? this.templates.header({ + query: query, + suggestions: suggestions, + dataset: this.name + }) : null; + }, + _resetLastSuggestion: function resetLastSuggestion() { + this.$lastSuggestion = $(); + }, + _injectQuery: function injectQuery(query, obj) { + return _.isObject(obj) ? _.mixin({ + _query: query + }, obj) : obj; + }, + update: function update(query) { + var that = this, canceled = false, syncCalled = false, rendered = 0; + this.cancel(); + this.cancel = function cancel() { + canceled = true; + that.cancel = $.noop; + that.async && that.trigger("asyncCanceled", query, that.name); + }; + this.source(query, sync, async); + !syncCalled && sync([]); + function sync(suggestions) { + if (syncCalled) { + return; + } + syncCalled = true; + suggestions = (suggestions || []).slice(0, that.limit); + rendered = suggestions.length; + that._overwrite(query, suggestions); + if (rendered < that.limit && that.async) { + that.trigger("asyncRequested", query, that.name); + } + } + function async(suggestions) { + suggestions = suggestions || []; + if (!canceled && rendered < that.limit) { + that.cancel = $.noop; + var idx = Math.abs(rendered - that.limit); + rendered += idx; + that._append(query, suggestions.slice(0, idx)); + that.async && that.trigger("asyncReceived", query, that.name); + } + } + }, + cancel: $.noop, + clear: function clear() { + this._empty(); + this.cancel(); + this.trigger("cleared"); + }, + isEmpty: function isEmpty() { + return this.$el.is(":empty"); + }, + destroy: function destroy() { + this.$el = $("
"); + } + }); + return Dataset; + function getDisplayFn(display) { + display = display || _.stringify; + return _.isFunction(display) ? display : displayFn; + function displayFn(obj) { + return obj[display]; + } + } + function getTemplates(templates, displayFn) { + return { + notFound: templates.notFound && _.templatify(templates.notFound), + pending: templates.pending && _.templatify(templates.pending), + header: templates.header && _.templatify(templates.header), + footer: templates.footer && _.templatify(templates.footer), + suggestion: templates.suggestion ? userSuggestionTemplate : suggestionTemplate + }; + function userSuggestionTemplate(context) { + var template = templates.suggestion; + return $(template(context)).attr("id", _.guid()); + } + function suggestionTemplate(context) { + return $('
').attr("id", _.guid()).text(displayFn(context)); + } + } + function isValidName(str) { + return /^[_a-zA-Z0-9-]+$/.test(str); + } + }(); + var Menu = function() { + "use strict"; + function Menu(o, www) { + var that = this; + o = o || {}; + if (!o.node) { + $.error("node is required"); + } + www.mixin(this); + this.$node = $(o.node); + this.query = null; + this.datasets = _.map(o.datasets, initializeDataset); + function initializeDataset(oDataset) { + var node = that.$node.find(oDataset.node).first(); + oDataset.node = node.length ? node : $("
").appendTo(that.$node); + return new Dataset(oDataset, www); + } + } + _.mixin(Menu.prototype, EventEmitter, { + _onSelectableClick: function onSelectableClick($e) { + this.trigger("selectableClicked", $($e.currentTarget)); + }, + _onRendered: function onRendered(type, dataset, suggestions, async) { + this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty()); + this.trigger("datasetRendered", dataset, suggestions, async); + }, + _onCleared: function onCleared() { + this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty()); + this.trigger("datasetCleared"); + }, + _propagate: function propagate() { + this.trigger.apply(this, arguments); + }, + _allDatasetsEmpty: function allDatasetsEmpty() { + return _.every(this.datasets, _.bind(function isDatasetEmpty(dataset) { + var isEmpty = dataset.isEmpty(); + this.$node.attr("aria-expanded", !isEmpty); + return isEmpty; + }, this)); + }, + _getSelectables: function getSelectables() { + return this.$node.find(this.selectors.selectable); + }, + _removeCursor: function _removeCursor() { + var $selectable = this.getActiveSelectable(); + $selectable && $selectable.removeClass(this.classes.cursor); + }, + _ensureVisible: function ensureVisible($el) { + var elTop, elBottom, nodeScrollTop, nodeHeight; + elTop = $el.position().top; + elBottom = elTop + $el.outerHeight(true); + nodeScrollTop = this.$node.scrollTop(); + nodeHeight = this.$node.height() + parseInt(this.$node.css("paddingTop"), 10) + parseInt(this.$node.css("paddingBottom"), 10); + if (elTop < 0) { + this.$node.scrollTop(nodeScrollTop + elTop); + } else if (nodeHeight < elBottom) { + this.$node.scrollTop(nodeScrollTop + (elBottom - nodeHeight)); + } + }, + bind: function() { + var that = this, onSelectableClick; + onSelectableClick = _.bind(this._onSelectableClick, this); + this.$node.on("click.tt", this.selectors.selectable, onSelectableClick); + this.$node.on("mouseover", this.selectors.selectable, function() { + that.setCursor($(this)); + }); + this.$node.on("mouseleave", function() { + that._removeCursor(); + }); + _.each(this.datasets, function(dataset) { + dataset.onSync("asyncRequested", that._propagate, that).onSync("asyncCanceled", that._propagate, that).onSync("asyncReceived", that._propagate, that).onSync("rendered", that._onRendered, that).onSync("cleared", that._onCleared, that); + }); + return this; + }, + isOpen: function isOpen() { + return this.$node.hasClass(this.classes.open); + }, + open: function open() { + this.$node.scrollTop(0); + this.$node.addClass(this.classes.open); + }, + close: function close() { + this.$node.attr("aria-expanded", false); + this.$node.removeClass(this.classes.open); + this._removeCursor(); + }, + setLanguageDirection: function setLanguageDirection(dir) { + this.$node.attr("dir", dir); + }, + selectableRelativeToCursor: function selectableRelativeToCursor(delta) { + var $selectables, $oldCursor, oldIndex, newIndex; + $oldCursor = this.getActiveSelectable(); + $selectables = this._getSelectables(); + oldIndex = $oldCursor ? $selectables.index($oldCursor) : -1; + newIndex = oldIndex + delta; + newIndex = (newIndex + 1) % ($selectables.length + 1) - 1; + newIndex = newIndex < -1 ? $selectables.length - 1 : newIndex; + return newIndex === -1 ? null : $selectables.eq(newIndex); + }, + setCursor: function setCursor($selectable) { + this._removeCursor(); + if ($selectable = $selectable && $selectable.first()) { + $selectable.addClass(this.classes.cursor); + this._ensureVisible($selectable); + } + }, + getSelectableData: function getSelectableData($el) { + return $el && $el.length ? Dataset.extractData($el) : null; + }, + getActiveSelectable: function getActiveSelectable() { + var $selectable = this._getSelectables().filter(this.selectors.cursor).first(); + return $selectable.length ? $selectable : null; + }, + getTopSelectable: function getTopSelectable() { + var $selectable = this._getSelectables().first(); + return $selectable.length ? $selectable : null; + }, + update: function update(query) { + var isValidUpdate = query !== this.query; + if (isValidUpdate) { + this.query = query; + _.each(this.datasets, updateDataset); + } + return isValidUpdate; + function updateDataset(dataset) { + dataset.update(query); + } + }, + empty: function empty() { + _.each(this.datasets, clearDataset); + this.query = null; + this.$node.addClass(this.classes.empty); + function clearDataset(dataset) { + dataset.clear(); + } + }, + destroy: function destroy() { + this.$node.off(".tt"); + this.$node = $("
"); + _.each(this.datasets, destroyDataset); + function destroyDataset(dataset) { + dataset.destroy(); + } + } + }); + return Menu; + }(); + var Status = function() { + "use strict"; + function Status(options) { + this.$el = $("", { + role: "status", + "aria-live": "polite" + }).css({ + position: "absolute", + padding: "0", + border: "0", + height: "1px", + width: "1px", + "margin-bottom": "-1px", + "margin-right": "-1px", + overflow: "hidden", + clip: "rect(0 0 0 0)", + "white-space": "nowrap" + }); + options.$input.after(this.$el); + _.each(options.menu.datasets, _.bind(function(dataset) { + if (dataset.onSync) { + dataset.onSync("rendered", _.bind(this.update, this)); + dataset.onSync("cleared", _.bind(this.cleared, this)); + } + }, this)); + } + _.mixin(Status.prototype, { + update: function update(event, suggestions) { + var length = suggestions.length; + var words; + if (length === 1) { + words = { + result: "result", + is: "is" + }; + } else { + words = { + result: "results", + is: "are" + }; + } + this.$el.text(length + " " + words.result + " " + words.is + " available, use up and down arrow keys to navigate."); + }, + cleared: function() { + this.$el.text(""); + } + }); + return Status; + }(); + var DefaultMenu = function() { + "use strict"; + var s = Menu.prototype; + function DefaultMenu() { + Menu.apply(this, [].slice.call(arguments, 0)); + } + _.mixin(DefaultMenu.prototype, Menu.prototype, { + open: function open() { + !this._allDatasetsEmpty() && this._show(); + return s.open.apply(this, [].slice.call(arguments, 0)); + }, + close: function close() { + this._hide(); + return s.close.apply(this, [].slice.call(arguments, 0)); + }, + _onRendered: function onRendered() { + if (this._allDatasetsEmpty()) { + this._hide(); + } else { + this.isOpen() && this._show(); + } + return s._onRendered.apply(this, [].slice.call(arguments, 0)); + }, + _onCleared: function onCleared() { + if (this._allDatasetsEmpty()) { + this._hide(); + } else { + this.isOpen() && this._show(); + } + return s._onCleared.apply(this, [].slice.call(arguments, 0)); + }, + setLanguageDirection: function setLanguageDirection(dir) { + this.$node.css(dir === "ltr" ? this.css.ltr : this.css.rtl); + return s.setLanguageDirection.apply(this, [].slice.call(arguments, 0)); + }, + _hide: function hide() { + this.$node.hide(); + }, + _show: function show() { + this.$node.css("display", "block"); + } + }); + return DefaultMenu; + }(); + var Typeahead = function() { + "use strict"; + function Typeahead(o, www) { + var onFocused, onBlurred, onEnterKeyed, onTabKeyed, onEscKeyed, onUpKeyed, onDownKeyed, onLeftKeyed, onRightKeyed, onQueryChanged, onWhitespaceChanged; + o = o || {}; + if (!o.input) { + $.error("missing input"); + } + if (!o.menu) { + $.error("missing menu"); + } + if (!o.eventBus) { + $.error("missing event bus"); + } + www.mixin(this); + this.eventBus = o.eventBus; + this.minLength = _.isNumber(o.minLength) ? o.minLength : 1; + this.input = o.input; + this.menu = o.menu; + this.enabled = true; + this.autoselect = !!o.autoselect; + this.active = false; + this.input.hasFocus() && this.activate(); + this.dir = this.input.getLangDir(); + this._hacks(); + this.menu.bind().onSync("selectableClicked", this._onSelectableClicked, this).onSync("asyncRequested", this._onAsyncRequested, this).onSync("asyncCanceled", this._onAsyncCanceled, this).onSync("asyncReceived", this._onAsyncReceived, this).onSync("datasetRendered", this._onDatasetRendered, this).onSync("datasetCleared", this._onDatasetCleared, this); + onFocused = c(this, "activate", "open", "_onFocused"); + onBlurred = c(this, "deactivate", "_onBlurred"); + onEnterKeyed = c(this, "isActive", "isOpen", "_onEnterKeyed"); + onTabKeyed = c(this, "isActive", "isOpen", "_onTabKeyed"); + onEscKeyed = c(this, "isActive", "_onEscKeyed"); + onUpKeyed = c(this, "isActive", "open", "_onUpKeyed"); + onDownKeyed = c(this, "isActive", "open", "_onDownKeyed"); + onLeftKeyed = c(this, "isActive", "isOpen", "_onLeftKeyed"); + onRightKeyed = c(this, "isActive", "isOpen", "_onRightKeyed"); + onQueryChanged = c(this, "_openIfActive", "_onQueryChanged"); + onWhitespaceChanged = c(this, "_openIfActive", "_onWhitespaceChanged"); + this.input.bind().onSync("focused", onFocused, this).onSync("blurred", onBlurred, this).onSync("enterKeyed", onEnterKeyed, this).onSync("tabKeyed", onTabKeyed, this).onSync("escKeyed", onEscKeyed, this).onSync("upKeyed", onUpKeyed, this).onSync("downKeyed", onDownKeyed, this).onSync("leftKeyed", onLeftKeyed, this).onSync("rightKeyed", onRightKeyed, this).onSync("queryChanged", onQueryChanged, this).onSync("whitespaceChanged", onWhitespaceChanged, this).onSync("langDirChanged", this._onLangDirChanged, this); + } + _.mixin(Typeahead.prototype, { + _hacks: function hacks() { + var $input, $menu; + $input = this.input.$input || $("
"); + $menu = this.menu.$node || $("
"); + $input.on("blur.tt", function($e) { + var active, isActive, hasActive; + active = document.activeElement; + isActive = $menu.is(active); + hasActive = $menu.has(active).length > 0; + if (_.isMsie() && (isActive || hasActive)) { + $e.preventDefault(); + $e.stopImmediatePropagation(); + _.defer(function() { + $input.focus(); + }); + } + }); + $menu.on("mousedown.tt", function($e) { + $e.preventDefault(); + }); + }, + _onSelectableClicked: function onSelectableClicked(type, $el) { + this.select($el); + }, + _onDatasetCleared: function onDatasetCleared() { + this._updateHint(); + }, + _onDatasetRendered: function onDatasetRendered(type, suggestions, async, dataset) { + this._updateHint(); + if (this.autoselect) { + var cursorClass = this.selectors.cursor.substr(1); + this.menu.$node.find(this.selectors.suggestion).first().addClass(cursorClass); + } + this.eventBus.trigger("render", suggestions, async, dataset); + }, + _onAsyncRequested: function onAsyncRequested(type, dataset, query) { + this.eventBus.trigger("asyncrequest", query, dataset); + }, + _onAsyncCanceled: function onAsyncCanceled(type, dataset, query) { + this.eventBus.trigger("asynccancel", query, dataset); + }, + _onAsyncReceived: function onAsyncReceived(type, dataset, query) { + this.eventBus.trigger("asyncreceive", query, dataset); + }, + _onFocused: function onFocused() { + this._minLengthMet() && this.menu.update(this.input.getQuery()); + }, + _onBlurred: function onBlurred() { + if (this.input.hasQueryChangedSinceLastFocus()) { + this.eventBus.trigger("change", this.input.getQuery()); + } + }, + _onEnterKeyed: function onEnterKeyed(type, $e) { + var $selectable; + if ($selectable = this.menu.getActiveSelectable()) { + if (this.select($selectable)) { + $e.preventDefault(); + $e.stopPropagation(); + } + } else if (this.autoselect) { + if (this.select(this.menu.getTopSelectable())) { + $e.preventDefault(); + $e.stopPropagation(); + } + } + }, + _onTabKeyed: function onTabKeyed(type, $e) { + var $selectable; + if ($selectable = this.menu.getActiveSelectable()) { + this.select($selectable) && $e.preventDefault(); + } else if (this.autoselect) { + if ($selectable = this.menu.getTopSelectable()) { + this.autocomplete($selectable) && $e.preventDefault(); + } + } + }, + _onEscKeyed: function onEscKeyed() { + this.close(); + }, + _onUpKeyed: function onUpKeyed() { + this.moveCursor(-1); + }, + _onDownKeyed: function onDownKeyed() { + this.moveCursor(+1); + }, + _onLeftKeyed: function onLeftKeyed() { + if (this.dir === "rtl" && this.input.isCursorAtEnd()) { + this.autocomplete(this.menu.getActiveSelectable() || this.menu.getTopSelectable()); + } + }, + _onRightKeyed: function onRightKeyed() { + if (this.dir === "ltr" && this.input.isCursorAtEnd()) { + this.autocomplete(this.menu.getActiveSelectable() || this.menu.getTopSelectable()); + } + }, + _onQueryChanged: function onQueryChanged(e, query) { + this._minLengthMet(query) ? this.menu.update(query) : this.menu.empty(); + }, + _onWhitespaceChanged: function onWhitespaceChanged() { + this._updateHint(); + }, + _onLangDirChanged: function onLangDirChanged(e, dir) { + if (this.dir !== dir) { + this.dir = dir; + this.menu.setLanguageDirection(dir); + } + }, + _openIfActive: function openIfActive() { + this.isActive() && this.open(); + }, + _minLengthMet: function minLengthMet(query) { + query = _.isString(query) ? query : this.input.getQuery() || ""; + return query.length >= this.minLength; + }, + _updateHint: function updateHint() { + var $selectable, data, val, query, escapedQuery, frontMatchRegEx, match; + $selectable = this.menu.getTopSelectable(); + data = this.menu.getSelectableData($selectable); + val = this.input.getInputValue(); + if (data && !_.isBlankString(val) && !this.input.hasOverflow()) { + query = Input.normalizeQuery(val); + escapedQuery = _.escapeRegExChars(query); + frontMatchRegEx = new RegExp("^(?:" + escapedQuery + ")(.+$)", "i"); + match = frontMatchRegEx.exec(data.val); + match && this.input.setHint(val + match[1]); + } else { + this.input.clearHint(); + } + }, + isEnabled: function isEnabled() { + return this.enabled; + }, + enable: function enable() { + this.enabled = true; + }, + disable: function disable() { + this.enabled = false; + }, + isActive: function isActive() { + return this.active; + }, + activate: function activate() { + if (this.isActive()) { + return true; + } else if (!this.isEnabled() || this.eventBus.before("active")) { + return false; + } else { + this.active = true; + this.eventBus.trigger("active"); + return true; + } + }, + deactivate: function deactivate() { + if (!this.isActive()) { + return true; + } else if (this.eventBus.before("idle")) { + return false; + } else { + this.active = false; + this.close(); + this.eventBus.trigger("idle"); + return true; + } + }, + isOpen: function isOpen() { + return this.menu.isOpen(); + }, + open: function open() { + if (!this.isOpen() && !this.eventBus.before("open")) { + this.input.setAriaExpanded(true); + this.menu.open(); + this._updateHint(); + this.eventBus.trigger("open"); + } + return this.isOpen(); + }, + close: function close() { + if (this.isOpen() && !this.eventBus.before("close")) { + this.input.setAriaExpanded(false); + this.menu.close(); + this.input.clearHint(); + this.input.resetInputValue(); + this.eventBus.trigger("close"); + } + return !this.isOpen(); + }, + setVal: function setVal(val) { + this.input.setQuery(_.toStr(val)); + }, + getVal: function getVal() { + return this.input.getQuery(); + }, + select: function select($selectable) { + var data = this.menu.getSelectableData($selectable); + if (data && !this.eventBus.before("select", data.obj, data.dataset)) { + this.input.setQuery(data.val, true); + this.eventBus.trigger("select", data.obj, data.dataset); + this.close(); + return true; + } + return false; + }, + autocomplete: function autocomplete($selectable) { + var query, data, isValid; + query = this.input.getQuery(); + data = this.menu.getSelectableData($selectable); + isValid = data && query !== data.val; + if (isValid && !this.eventBus.before("autocomplete", data.obj, data.dataset)) { + this.input.setQuery(data.val); + this.eventBus.trigger("autocomplete", data.obj, data.dataset); + return true; + } + return false; + }, + moveCursor: function moveCursor(delta) { + var query, $candidate, data, suggestion, datasetName, cancelMove, id; + query = this.input.getQuery(); + $candidate = this.menu.selectableRelativeToCursor(delta); + data = this.menu.getSelectableData($candidate); + suggestion = data ? data.obj : null; + datasetName = data ? data.dataset : null; + id = $candidate ? $candidate.attr("id") : null; + this.input.trigger("cursorchange", id); + cancelMove = this._minLengthMet() && this.menu.update(query); + if (!cancelMove && !this.eventBus.before("cursorchange", suggestion, datasetName)) { + this.menu.setCursor($candidate); + if (data) { + if (typeof data.val === "string") { + this.input.setInputValue(data.val); + } + } else { + this.input.resetInputValue(); + this._updateHint(); + } + this.eventBus.trigger("cursorchange", suggestion, datasetName); + return true; + } + return false; + }, + destroy: function destroy() { + this.input.destroy(); + this.menu.destroy(); + } + }); + return Typeahead; + function c(ctx) { + var methods = [].slice.call(arguments, 1); + return function() { + var args = [].slice.call(arguments); + _.each(methods, function(method) { + return ctx[method].apply(ctx, args); + }); + }; + } + }(); + (function() { + "use strict"; + var old, keys, methods; + old = $.fn.typeahead; + keys = { + www: "tt-www", + attrs: "tt-attrs", + typeahead: "tt-typeahead" + }; + methods = { + initialize: function initialize(o, datasets) { + var www; + datasets = _.isArray(datasets) ? datasets : [].slice.call(arguments, 1); + o = o || {}; + www = WWW(o.classNames); + return this.each(attach); + function attach() { + var $input, $wrapper, $hint, $menu, defaultHint, defaultMenu, eventBus, input, menu, status, typeahead, MenuConstructor; + _.each(datasets, function(d) { + d.highlight = !!o.highlight; + }); + $input = $(this); + $wrapper = $(www.html.wrapper); + $hint = $elOrNull(o.hint); + $menu = $elOrNull(o.menu); + defaultHint = o.hint !== false && !$hint; + defaultMenu = o.menu !== false && !$menu; + defaultHint && ($hint = buildHintFromInput($input, www)); + defaultMenu && ($menu = $(www.html.menu).css(www.css.menu)); + $hint && $hint.val(""); + $input = prepInput($input, www); + if (defaultHint || defaultMenu) { + $wrapper.css(www.css.wrapper); + $input.css(defaultHint ? www.css.input : www.css.inputWithNoHint); + $input.wrap($wrapper).parent().prepend(defaultHint ? $hint : null).append(defaultMenu ? $menu : null); + } + MenuConstructor = defaultMenu ? DefaultMenu : Menu; + eventBus = new EventBus({ + el: $input + }); + input = new Input({ + hint: $hint, + input: $input, + menu: $menu + }, www); + menu = new MenuConstructor({ + node: $menu, + datasets: datasets + }, www); + status = new Status({ + $input: $input, + menu: menu + }); + typeahead = new Typeahead({ + input: input, + menu: menu, + eventBus: eventBus, + minLength: o.minLength, + autoselect: o.autoselect + }, www); + $input.data(keys.www, www); + $input.data(keys.typeahead, typeahead); + } + }, + isEnabled: function isEnabled() { + var enabled; + ttEach(this.first(), function(t) { + enabled = t.isEnabled(); + }); + return enabled; + }, + enable: function enable() { + ttEach(this, function(t) { + t.enable(); + }); + return this; + }, + disable: function disable() { + ttEach(this, function(t) { + t.disable(); + }); + return this; + }, + isActive: function isActive() { + var active; + ttEach(this.first(), function(t) { + active = t.isActive(); + }); + return active; + }, + activate: function activate() { + ttEach(this, function(t) { + t.activate(); + }); + return this; + }, + deactivate: function deactivate() { + ttEach(this, function(t) { + t.deactivate(); + }); + return this; + }, + isOpen: function isOpen() { + var open; + ttEach(this.first(), function(t) { + open = t.isOpen(); + }); + return open; + }, + open: function open() { + ttEach(this, function(t) { + t.open(); + }); + return this; + }, + close: function close() { + ttEach(this, function(t) { + t.close(); + }); + return this; + }, + select: function select(el) { + var success = false, $el = $(el); + ttEach(this.first(), function(t) { + success = t.select($el); + }); + return success; + }, + autocomplete: function autocomplete(el) { + var success = false, $el = $(el); + ttEach(this.first(), function(t) { + success = t.autocomplete($el); + }); + return success; + }, + moveCursor: function moveCursoe(delta) { + var success = false; + ttEach(this.first(), function(t) { + success = t.moveCursor(delta); + }); + return success; + }, + val: function val(newVal) { + var query; + if (!arguments.length) { + ttEach(this.first(), function(t) { + query = t.getVal(); + }); + return query; + } else { + ttEach(this, function(t) { + t.setVal(_.toStr(newVal)); + }); + return this; + } + }, + destroy: function destroy() { + ttEach(this, function(typeahead, $input) { + revert($input); + typeahead.destroy(); + }); + return this; + } + }; + $.fn.typeahead = function(method) { + if (methods[method]) { + return methods[method].apply(this, [].slice.call(arguments, 1)); + } else { + return methods.initialize.apply(this, arguments); + } + }; + $.fn.typeahead.noConflict = function noConflict() { + $.fn.typeahead = old; + return this; + }; + function ttEach($els, fn) { + $els.each(function() { + var $input = $(this), typeahead; + (typeahead = $input.data(keys.typeahead)) && fn(typeahead, $input); + }); + } + function buildHintFromInput($input, www) { + return $input.clone().addClass(www.classes.hint).removeData().css(www.css.hint).css(getBackgroundStyles($input)).prop({ + readonly: true, + required: false + }).removeAttr("id name placeholder").removeClass("required").attr({ + spellcheck: "false", + tabindex: -1 + }); + } + function prepInput($input, www) { + $input.data(keys.attrs, { + dir: $input.attr("dir"), + autocomplete: $input.attr("autocomplete"), + spellcheck: $input.attr("spellcheck"), + style: $input.attr("style") + }); + $input.addClass(www.classes.input).attr({ + spellcheck: false + }); + try { + !$input.attr("dir") && $input.attr("dir", "auto"); + } catch (e) {} + return $input; + } + function getBackgroundStyles($el) { + return { + backgroundAttachment: $el.css("background-attachment"), + backgroundClip: $el.css("background-clip"), + backgroundColor: $el.css("background-color"), + backgroundImage: $el.css("background-image"), + backgroundOrigin: $el.css("background-origin"), + backgroundPosition: $el.css("background-position"), + backgroundRepeat: $el.css("background-repeat"), + backgroundSize: $el.css("background-size") + }; + } + function revert($input) { + var www, $wrapper; + www = $input.data(keys.www); + $wrapper = $input.parent().filter(www.selectors.wrapper); + _.each($input.data(keys.attrs), function(val, key) { + _.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val); + }); + $input.removeData(keys.typeahead).removeData(keys.www).removeData(keys.attr).removeClass(www.classes.input); + if ($wrapper.length) { + $input.detach().insertAfter($wrapper); + $wrapper.remove(); + } + } + function $elOrNull(obj) { + var isValid, $el; + isValid = _.isJQuery(obj) || _.isElement(obj); + $el = isValid ? $(obj).first() : []; + return $el.length ? $el : null; + } + })(); +}); \ No newline at end of file diff --git a/search.json b/search.json new file mode 100644 index 00000000..33742659 --- /dev/null +++ b/search.json @@ -0,0 +1 @@ +{"Enums/FileSystemType.html#/s:13SWCompression14FileSystemTypeO3fatyA2CmF":{"name":"fat","abstract":"

FAT filesystem.

","parent_name":"FileSystemType"},"Enums/FileSystemType.html#/s:13SWCompression14FileSystemTypeO9macintoshyA2CmF":{"name":"macintosh","abstract":"

Filesystem of older Macintosh systems.

","parent_name":"FileSystemType"},"Enums/FileSystemType.html#/s:13SWCompression14FileSystemTypeO4ntfsyA2CmF":{"name":"ntfs","abstract":"

NTFS.

","parent_name":"FileSystemType"},"Enums/FileSystemType.html#/s:13SWCompression14FileSystemTypeO5otheryA2CmF":{"name":"other","abstract":"

Other/unknown file system.

","parent_name":"FileSystemType"},"Enums/FileSystemType.html#/s:13SWCompression14FileSystemTypeO4unixyA2CmF":{"name":"unix","abstract":"

One of many file systems of UNIX-like OS.

","parent_name":"FileSystemType"},"Enums/CompressionMethod.html#/s:13SWCompression17CompressionMethodO5bzip2yA2CmF":{"name":"bzip2","abstract":"

BZip2.

","parent_name":"CompressionMethod"},"Enums/CompressionMethod.html#/s:13SWCompression17CompressionMethodO4copyyA2CmF":{"name":"copy","abstract":"

Copy (no compression).

","parent_name":"CompressionMethod"},"Enums/CompressionMethod.html#/s:13SWCompression17CompressionMethodO7deflateyA2CmF":{"name":"deflate","abstract":"

Deflate.

","parent_name":"CompressionMethod"},"Enums/CompressionMethod.html#/s:13SWCompression17CompressionMethodO4lzmayA2CmF":{"name":"lzma","abstract":"

LZMA.

","parent_name":"CompressionMethod"},"Enums/CompressionMethod.html#/s:13SWCompression17CompressionMethodO5lzma2yA2CmF":{"name":"lzma2","abstract":"

LZMA 2.

","parent_name":"CompressionMethod"},"Enums/CompressionMethod.html#/s:13SWCompression17CompressionMethodO5otheryA2CmF":{"name":"other","abstract":"

Other/unknown method.

","parent_name":"CompressionMethod"},"Structs/Permissions.html#/s:13SWCompression11PermissionsV8rawValues6UInt32Vvp":{"name":"rawValue","abstract":"

Raw bit flags value (in decimal).

","parent_name":"Permissions"},"Structs/Permissions.html#/s:13SWCompression11PermissionsV8rawValueACs6UInt32V_tcfc":{"name":"init(rawValue:)","abstract":"

Initializes permissions with bit flags in decimal.

","parent_name":"Permissions"},"Structs/Permissions.html#/s:13SWCompression11PermissionsV6setuidACvpZ":{"name":"setuid","abstract":"

Set UID.

","parent_name":"Permissions"},"Structs/Permissions.html#/s:13SWCompression11PermissionsV6setgidACvpZ":{"name":"setgid","abstract":"

Set GID.

","parent_name":"Permissions"},"Structs/Permissions.html#/s:13SWCompression11PermissionsV6stickyACvpZ":{"name":"sticky","abstract":"

Sticky bit.

","parent_name":"Permissions"},"Structs/Permissions.html#/s:13SWCompression11PermissionsV9readOwnerACvpZ":{"name":"readOwner","abstract":"

Owner can read.

","parent_name":"Permissions"},"Structs/Permissions.html#/s:13SWCompression11PermissionsV10writeOwnerACvpZ":{"name":"writeOwner","abstract":"

Owner can write.

","parent_name":"Permissions"},"Structs/Permissions.html#/s:13SWCompression11PermissionsV12executeOwnerACvpZ":{"name":"executeOwner","abstract":"

Owner can execute.

","parent_name":"Permissions"},"Structs/Permissions.html#/s:13SWCompression11PermissionsV9readGroupACvpZ":{"name":"readGroup","abstract":"

Group can read.

","parent_name":"Permissions"},"Structs/Permissions.html#/s:13SWCompression11PermissionsV10writeGroupACvpZ":{"name":"writeGroup","abstract":"

Group can write.

","parent_name":"Permissions"},"Structs/Permissions.html#/s:13SWCompression11PermissionsV12executeGroupACvpZ":{"name":"executeGroup","abstract":"

Group can execute.

","parent_name":"Permissions"},"Structs/Permissions.html#/s:13SWCompression11PermissionsV9readOtherACvpZ":{"name":"readOther","abstract":"

Others can read.

","parent_name":"Permissions"},"Structs/Permissions.html#/s:13SWCompression11PermissionsV10writeOtherACvpZ":{"name":"writeOther","abstract":"

Others can write.

","parent_name":"Permissions"},"Structs/Permissions.html#/s:13SWCompression11PermissionsV12executeOtherACvpZ":{"name":"executeOther","abstract":"

Others can execute.

","parent_name":"Permissions"},"Structs/DosAttributes.html#/s:13SWCompression13DosAttributesV8rawValues6UInt32Vvp":{"name":"rawValue","abstract":"

Raw bit flags value.

","parent_name":"DosAttributes"},"Structs/DosAttributes.html#/s:13SWCompression13DosAttributesV8rawValueACs6UInt32V_tcfc":{"name":"init(rawValue:)","abstract":"

Initializes attributes with bit flags.

","parent_name":"DosAttributes"},"Structs/DosAttributes.html#/s:13SWCompression13DosAttributesV7archiveACvpZ":{"name":"archive","abstract":"

File is archive or archived.

","parent_name":"DosAttributes"},"Structs/DosAttributes.html#/s:13SWCompression13DosAttributesV9directoryACvpZ":{"name":"directory","abstract":"

File is a directory.

","parent_name":"DosAttributes"},"Structs/DosAttributes.html#/s:13SWCompression13DosAttributesV6volumeACvpZ":{"name":"volume","abstract":"

File is a volume.

","parent_name":"DosAttributes"},"Structs/DosAttributes.html#/s:13SWCompression13DosAttributesV6systemACvpZ":{"name":"system","abstract":"

File is a system file.

","parent_name":"DosAttributes"},"Structs/DosAttributes.html#/s:13SWCompression13DosAttributesV6hiddenACvpZ":{"name":"hidden","abstract":"

File is hidden.

","parent_name":"DosAttributes"},"Structs/DosAttributes.html#/s:13SWCompression13DosAttributesV8readOnlyACvpZ":{"name":"readOnly","abstract":"

File is read-only.

","parent_name":"DosAttributes"},"Enums/ContainerEntryType.html#/s:13SWCompression18ContainerEntryTypeO12blockSpecialyA2CmF":{"name":"blockSpecial","abstract":"

Block special file.

","parent_name":"ContainerEntryType"},"Enums/ContainerEntryType.html#/s:13SWCompression18ContainerEntryTypeO16characterSpecialyA2CmF":{"name":"characterSpecial","abstract":"

Character special file.

","parent_name":"ContainerEntryType"},"Enums/ContainerEntryType.html#/s:13SWCompression18ContainerEntryTypeO10contiguousyA2CmF":{"name":"contiguous","abstract":"

Contiguous file.

","parent_name":"ContainerEntryType"},"Enums/ContainerEntryType.html#/s:13SWCompression18ContainerEntryTypeO9directoryyA2CmF":{"name":"directory","abstract":"

Directory.

","parent_name":"ContainerEntryType"},"Enums/ContainerEntryType.html#/s:13SWCompression18ContainerEntryTypeO4fifoyA2CmF":{"name":"fifo","abstract":"

FIFO special file.

","parent_name":"ContainerEntryType"},"Enums/ContainerEntryType.html#/s:13SWCompression18ContainerEntryTypeO8hardLinkyA2CmF":{"name":"hardLink","abstract":"

Hard link.

","parent_name":"ContainerEntryType"},"Enums/ContainerEntryType.html#/s:13SWCompression18ContainerEntryTypeO7regularyA2CmF":{"name":"regular","abstract":"

Regular file.

","parent_name":"ContainerEntryType"},"Enums/ContainerEntryType.html#/s:13SWCompression18ContainerEntryTypeO6socketyA2CmF":{"name":"socket","abstract":"

Socket.

","parent_name":"ContainerEntryType"},"Enums/ContainerEntryType.html#/s:13SWCompression18ContainerEntryTypeO12symbolicLinkyA2CmF":{"name":"symbolicLink","abstract":"

Symbolic link.

","parent_name":"ContainerEntryType"},"Enums/ContainerEntryType.html#/s:13SWCompression18ContainerEntryTypeO7unknownyA2CmF":{"name":"unknown","abstract":"

Entry type is unknown.

","parent_name":"ContainerEntryType"},"Enums/ContainerEntryType.html":{"name":"ContainerEntryType","abstract":"

Represents the type of a container entry.

"},"Structs/DosAttributes.html":{"name":"DosAttributes","abstract":"

Represents file attributes in DOS format.

"},"Structs/Permissions.html":{"name":"Permissions","abstract":"

Represents file access permissions in UNIX format.

"},"Enums/CompressionMethod.html":{"name":"CompressionMethod","abstract":"

Represents a (de)compression method.

"},"Enums/FileSystemType.html":{"name":"FileSystemType","abstract":"

Represents the type of the file system on which an archive or container was created. File system determines the meaning"},"Protocols/DecompressionAlgorithm.html#/s:13SWCompression22DecompressionAlgorithmP10decompress4data10Foundation4DataVAH_tKFZ":{"name":"decompress(data:)","abstract":"

Decompress data compressed with particular algorithm.

","parent_name":"DecompressionAlgorithm"},"Protocols/CompressionAlgorithm.html#/s:13SWCompression20CompressionAlgorithmP8compress4data10Foundation4DataVAH_tKFZ":{"name":"compress(data:)","abstract":"

Compress data with particular algorithm.

","parent_name":"CompressionAlgorithm"},"Protocols/ContainerEntryInfo.html#/s:13SWCompression18ContainerEntryInfoP4nameSSvp":{"name":"name","abstract":"

Entry’s name.

","parent_name":"ContainerEntryInfo"},"Protocols/ContainerEntryInfo.html#/s:13SWCompression18ContainerEntryInfoP4typeAA0bC4TypeOvp":{"name":"type","abstract":"

Entry’s type.

","parent_name":"ContainerEntryInfo"},"Protocols/ContainerEntryInfo.html#/s:13SWCompression18ContainerEntryInfoP4sizeSiSgvp":{"name":"size","abstract":"

Entry’s data size (can be nil if either data or size aren’t available).

","parent_name":"ContainerEntryInfo"},"Protocols/ContainerEntryInfo.html#/s:13SWCompression18ContainerEntryInfoP10accessTime10Foundation4DateVSgvp":{"name":"accessTime","abstract":"

Entry’s last access time (nil, if not available).

","parent_name":"ContainerEntryInfo"},"Protocols/ContainerEntryInfo.html#/s:13SWCompression18ContainerEntryInfoP12creationTime10Foundation4DateVSgvp":{"name":"creationTime","abstract":"

Entry’s creation time (nil, if not available).

","parent_name":"ContainerEntryInfo"},"Protocols/ContainerEntryInfo.html#/s:13SWCompression18ContainerEntryInfoP16modificationTime10Foundation4DateVSgvp":{"name":"modificationTime","abstract":"

Entry’s last modification time (nil, if not available).

","parent_name":"ContainerEntryInfo"},"Protocols/ContainerEntryInfo.html#/s:13SWCompression18ContainerEntryInfoP11permissionsAA11PermissionsVSgvp":{"name":"permissions","abstract":"

Entry’s permissions in POSIX format (nil, if not available).

","parent_name":"ContainerEntryInfo"},"Protocols/ContainerEntry.html#/s:13SWCompression14ContainerEntryP4InfoQa":{"name":"Info","abstract":"

A type that provides information about an entry.

","parent_name":"ContainerEntry"},"Protocols/ContainerEntry.html#/s:13SWCompression14ContainerEntryP4info4InfoQzvp":{"name":"info","abstract":"

Provides access to information about the entry.

","parent_name":"ContainerEntry"},"Protocols/ContainerEntry.html#/s:13SWCompression14ContainerEntryP4data10Foundation4DataVSgvp":{"name":"data","abstract":"

Entry’s data (nil if entry is a directory or data isn’t available).

","parent_name":"ContainerEntry"},"Protocols/Container.html#/s:13SWCompression9ContainerP5EntryQa":{"name":"Entry","abstract":"

A type that represents an entry from this container.

","parent_name":"Container"},"Protocols/Container.html#/s:13SWCompression9ContainerP4open9containerSay5EntryQzG10Foundation4DataV_tKFZ":{"name":"open(container:)","abstract":"

Retrieve all container entries with their data.

","parent_name":"Container"},"Protocols/Container.html#/s:13SWCompression9ContainerP4info9containerSay5Entry_4InfoQZG10Foundation4DataV_tKFZ":{"name":"info(container:)","abstract":"

Retrieve information about all container entries (without their data).

","parent_name":"Container"},"Protocols/Archive.html#/s:13SWCompression7ArchiveP9unarchive7archive10Foundation4DataVAH_tKFZ":{"name":"unarchive(archive:)","abstract":"

Unarchive data from the archive.

","parent_name":"Archive"},"Protocols/Archive.html":{"name":"Archive","abstract":"

A type that represents an archive.

"},"Protocols/Container.html":{"name":"Container","abstract":"

A type that represents a container with files, directories and/or other data.

"},"Protocols/ContainerEntry.html":{"name":"ContainerEntry","abstract":"

A type that represents an entry from the container with its data and information.

"},"Protocols/ContainerEntryInfo.html":{"name":"ContainerEntryInfo","abstract":"

A type that provides access to information about an entry from the container.

"},"Protocols/CompressionAlgorithm.html":{"name":"CompressionAlgorithm","abstract":"

A type that provides an implementation of a particular compression algorithm.

"},"Protocols/DecompressionAlgorithm.html":{"name":"DecompressionAlgorithm","abstract":"

A type that provides an implementation of a particular decompression algorithm.

"},"Enums/ZlibError.html#/s:13SWCompression9ZlibErrorO22wrongCompressionMethodyA2CmF":{"name":"wrongCompressionMethod","abstract":"

Compression method used in archive is different from Deflate, which is the only supported one.

","parent_name":"ZlibError"},"Enums/ZlibError.html#/s:13SWCompression9ZlibErrorO20wrongCompressionInfoyA2CmF":{"name":"wrongCompressionInfo","abstract":"

Compression info has value incompatible with Deflate compression method.

","parent_name":"ZlibError"},"Enums/ZlibError.html#/s:13SWCompression9ZlibErrorO11wrongFcheckyA2CmF":{"name":"wrongFcheck","abstract":"

First two bytes of archive’s flags are inconsistent with each other.

","parent_name":"ZlibError"},"Enums/ZlibError.html#/s:13SWCompression9ZlibErrorO21wrongCompressionLevelyA2CmF":{"name":"wrongCompressionLevel","abstract":"

Compression level has value, which is different from the supported ones.

","parent_name":"ZlibError"},"Enums/ZlibError.html#/s:13SWCompression9ZlibErrorO12wrongAdler32yAC10Foundation4DataVcACmF":{"name":"wrongAdler32(_:)","abstract":"

Computed checksum of uncompressed data doesn’t match the value stored in archive.","parent_name":"ZlibError"},"Enums/ZipError.html#/s:13SWCompression8ZipErrorO27notFoundCentralDirectoryEndyA2CmF":{"name":"notFoundCentralDirectoryEnd","abstract":"

End of Central Directoty record wasn’t found.

","parent_name":"ZipError"},"Enums/ZipError.html#/s:13SWCompression8ZipErrorO14wrongSignatureyA2CmF":{"name":"wrongSignature","abstract":"

Wrong signature of one of container’s structures.

","parent_name":"ZipError"},"Enums/ZipError.html#/s:13SWCompression8ZipErrorO9wrongSizeyA2CmF":{"name":"wrongSize","abstract":"

Wrong either compressed or uncompressed size of a container’s entry.

","parent_name":"ZipError"},"Enums/ZipError.html#/s:13SWCompression8ZipErrorO12wrongVersionyA2CmF":{"name":"wrongVersion","abstract":"

Version needed to process container is unsupported.

","parent_name":"ZipError"},"Enums/ZipError.html#/s:13SWCompression8ZipErrorO24multiVolumesNotSupportedyA2CmF":{"name":"multiVolumesNotSupported","abstract":"

Container is either spanned or consists of several volumes. These features aren’t supported.

","parent_name":"ZipError"},"Enums/ZipError.html#/s:13SWCompression8ZipErrorO22encryptionNotSupportedyA2CmF":{"name":"encryptionNotSupported","abstract":"

Entry or record is encrypted. This feature isn’t supported.

","parent_name":"ZipError"},"Enums/ZipError.html#/s:13SWCompression8ZipErrorO20patchingNotSupportedyA2CmF":{"name":"patchingNotSupported","abstract":"

Entry contains patched data. This feature isn’t supported.

","parent_name":"ZipError"},"Enums/ZipError.html#/s:13SWCompression8ZipErrorO23compressionNotSupportedyA2CmF":{"name":"compressionNotSupported","abstract":"

Entry is compressed using unsupported compression method.

","parent_name":"ZipError"},"Enums/ZipError.html#/s:13SWCompression8ZipErrorO16wrongLocalHeaderyA2CmF":{"name":"wrongLocalHeader","abstract":"

Local header of an entry is inconsistent with Central Directory.

","parent_name":"ZipError"},"Enums/ZipError.html#/s:13SWCompression8ZipErrorO8wrongCRCyACSayAA0B5EntryVGcACmF":{"name":"wrongCRC(_:)","abstract":"

Computed checksum of entry’s data doesn’t match the value stored in the archive.","parent_name":"ZipError"},"Enums/ZipError.html#/s:13SWCompression8ZipErrorO14wrongTextFieldyA2CmF":{"name":"wrongTextField","abstract":"

Either entry’s comment or file name cannot be processed using UTF-8 encoding.

","parent_name":"ZipError"},"Enums/XZError.html#/s:13SWCompression7XZErrorO10wrongMagicyA2CmF":{"name":"wrongMagic","abstract":"

Either ‘magic’ number in header or footer isn’t equal to a predefined value.

","parent_name":"XZError"},"Enums/XZError.html#/s:13SWCompression7XZErrorO10wrongFieldyA2CmF":{"name":"wrongField","abstract":"

One of the special fields in archive has an incorrect value,","parent_name":"XZError"},"Enums/XZError.html#/s:13SWCompression7XZErrorO12wrongInfoCRCyA2CmF":{"name":"wrongInfoCRC","abstract":"

Checksum of one of the fields of archive doesn’t match the value stored in archive.

","parent_name":"XZError"},"Enums/XZError.html#/s:13SWCompression7XZErrorO13wrongFilterIDyA2CmF":{"name":"wrongFilterID","abstract":"

Filter used in archive is unsupported.

","parent_name":"XZError"},"Enums/XZError.html#/s:13SWCompression7XZErrorO15checkTypeSHA256yA2CmF":{"name":"checkTypeSHA256","abstract":"

Archive uses SHA-256 checksum which is unsupported.

","parent_name":"XZError"},"Enums/XZError.html#/s:13SWCompression7XZErrorO13wrongDataSizeyA2CmF":{"name":"wrongDataSize","abstract":"

Either size of decompressed data isn’t equal to the one specified in archive or","parent_name":"XZError"},"Enums/XZError.html#/s:13SWCompression7XZErrorO10wrongCheckyACSay10Foundation4DataVGcACmF":{"name":"wrongCheck(_:)","abstract":"

Computed checksum of uncompressed data doesn’t match the value stored in the archive.","parent_name":"XZError"},"Enums/XZError.html#/s:13SWCompression7XZErrorO12wrongPaddingyA2CmF":{"name":"wrongPadding","abstract":"

Padding (null-bytes appended to an archive’s structure) is incorrect.

","parent_name":"XZError"},"Enums/XZError.html#/s:13SWCompression7XZErrorO21multiByteIntegerErroryA2CmF":{"name":"multiByteIntegerError","abstract":"

Either null byte encountered or exceeded maximum amount bytes while reading multi byte number.

","parent_name":"XZError"},"Enums/TarError.html#/s:13SWCompression8TarErrorO20tooSmallFileIsPassedyA2CmF":{"name":"tooSmallFileIsPassed","abstract":"

Data is unexpectedly truncated.

","parent_name":"TarError"},"Enums/TarError.html#/s:13SWCompression8TarErrorO10wrongFieldyA2CmF":{"name":"wrongField","abstract":"

Failed to process a required TAR header’s field.

","parent_name":"TarError"},"Enums/TarError.html#/s:13SWCompression8TarErrorO19wrongHeaderChecksumyA2CmF":{"name":"wrongHeaderChecksum","abstract":"

Computed checksum of a header doesn’t match the value stored in container.

","parent_name":"TarError"},"Enums/TarError.html#/s:13SWCompression8TarErrorO19wrongPaxHeaderEntryyA2CmF":{"name":"wrongPaxHeaderEntry","abstract":"

Entry from PAX extended header is in incorrect format.

","parent_name":"TarError"},"Enums/TarCreateError.html#/s:13SWCompression14TarCreateErrorO16utf8NonEncodableyA2CmF":{"name":"utf8NonEncodable","abstract":"

One of the TarEntryInfo‘s string properties (such as name) cannot be encoded with UTF-8 encoding.

","parent_name":"TarCreateError"},"Enums/SevenZipError.html#/s:13SWCompression13SevenZipErrorO14wrongSignatureyA2CmF":{"name":"wrongSignature","abstract":"

Wrong container’s signature.

","parent_name":"SevenZipError"},"Enums/SevenZipError.html#/s:13SWCompression13SevenZipErrorO18wrongFormatVersionyA2CmF":{"name":"wrongFormatVersion","abstract":"

Unsupported version of container’s format.

","parent_name":"SevenZipError"},"Enums/SevenZipError.html#/s:13SWCompression13SevenZipErrorO8wrongCRCyA2CmF":{"name":"wrongCRC","abstract":"

CRC either of one of the files from the container or one of the container’s strucutures is incorrect.

","parent_name":"SevenZipError"},"Enums/SevenZipError.html#/s:13SWCompression13SevenZipErrorO9wrongSizeyA2CmF":{"name":"wrongSize","abstract":"

Size either of one of the files from the container or one of the container’s strucutures is incorrect.

","parent_name":"SevenZipError"},"Enums/SevenZipError.html#/s:13SWCompression13SevenZipErrorO20startPosNotSupportedyA2CmF":{"name":"startPosNotSupported","abstract":"

Files have StartPos property. This feature isn’t supported.

","parent_name":"SevenZipError"},"Enums/SevenZipError.html#/s:13SWCompression13SevenZipErrorO20externalNotSupportedyA2CmF":{"name":"externalNotSupported","abstract":"

External feature isn’t supported.

","parent_name":"SevenZipError"},"Enums/SevenZipError.html#/s:13SWCompression13SevenZipErrorO23multiStreamNotSupportedyA2CmF":{"name":"multiStreamNotSupported","abstract":"

Coders with multiple in and/or out streams aren’t supported.

","parent_name":"SevenZipError"},"Enums/SevenZipError.html#/s:13SWCompression13SevenZipErrorO29additionalStreamsNotSupportedyA2CmF":{"name":"additionalStreamsNotSupported","abstract":"

Additional streams feature isn’t supported.

","parent_name":"SevenZipError"},"Enums/SevenZipError.html#/s:13SWCompression13SevenZipErrorO23compressionNotSupportedyA2CmF":{"name":"compressionNotSupported","abstract":"

Entry is compressed using unsupported compression method.

","parent_name":"SevenZipError"},"Enums/SevenZipError.html#/s:13SWCompression13SevenZipErrorO22encryptionNotSupportedyA2CmF":{"name":"encryptionNotSupported","abstract":"

Entry or container’s header is encrypted. This feature isn’t supported.

","parent_name":"SevenZipError"},"Enums/SevenZipError.html#/s:13SWCompression13SevenZipErrorO017internalStructureD0yA2CmF":{"name":"internalStructureError","abstract":"

Unknown/incorrect internal 7-Zip structure was encountered or a required internal structure is missing.

","parent_name":"SevenZipError"},"Enums/LZMA2Error.html#/s:13SWCompression10LZMA2ErrorO19wrongDictionarySizeyA2CmF":{"name":"wrongDictionarySize","abstract":"

Dictionary size is too big, or has reserved bits set, or is in incorrect format in general.

","parent_name":"LZMA2Error"},"Enums/LZMA2Error.html#/s:13SWCompression10LZMA2ErrorO16wrongControlByteyA2CmF":{"name":"wrongControlByte","abstract":"

Unknown conrol byte value of LZMA2 packet.

","parent_name":"LZMA2Error"},"Enums/LZMA2Error.html#/s:13SWCompression10LZMA2ErrorO10wrongResetyA2CmF":{"name":"wrongReset","abstract":"

Unknown reset instruction encountered in LZMA2 packet.

","parent_name":"LZMA2Error"},"Enums/LZMA2Error.html#/s:13SWCompression10LZMA2ErrorO10wrongSizesyA2CmF":{"name":"wrongSizes","abstract":"

Either size of decompressed data isn’t equal to the one specified in LZMA2 packet or","parent_name":"LZMA2Error"},"Enums/LZMAError.html#/s:13SWCompression9LZMAErrorO15wrongPropertiesyA2CmF":{"name":"wrongProperties","abstract":"

Properties’ byte is greater than 225.

","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:13SWCompression9LZMAErrorO21rangeDecoderInitErroryA2CmF":{"name":"rangeDecoderInitError","abstract":"

Unable to initialize RanderDecorer.

","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:13SWCompression9LZMAErrorO24exceededUncompressedSizeyA2CmF":{"name":"exceededUncompressedSize","abstract":"

Size of uncompressed data hit specified limit in the middle of decoding.

","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:13SWCompression9LZMAErrorO13windowIsEmptyyA2CmF":{"name":"windowIsEmpty","abstract":"

Unable to perfrom repeat-distance decoding because there is nothing to repeat.

","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:13SWCompression9LZMAErrorO23rangeDecoderFinishErroryA2CmF":{"name":"rangeDecoderFinishError","abstract":"

End of stream marker is reached, but range decoder is in incorrect state.

","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:13SWCompression9LZMAErrorO16repeatWillExceedyA2CmF":{"name":"repeatWillExceed","abstract":"

The number of bytes to repeat is greater than the amount bytes that is left to decode.

","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:13SWCompression9LZMAErrorO17notEnoughToRepeatyA2CmF":{"name":"notEnoughToRepeat","abstract":"

The amount of already decoded bytes is smaller than repeat length.

","parent_name":"LZMAError"},"Enums/GzipError.html#/s:13SWCompression9GzipErrorO10wrongMagicyA2CmF":{"name":"wrongMagic","abstract":"

First two bytes (‘magic’ number) of archive isn’t 31 and 139.

","parent_name":"GzipError"},"Enums/GzipError.html#/s:13SWCompression9GzipErrorO22wrongCompressionMethodyA2CmF":{"name":"wrongCompressionMethod","abstract":"

Compression method used in archive is different from Deflate, which is the only supported one.

","parent_name":"GzipError"},"Enums/GzipError.html#/s:13SWCompression9GzipErrorO10wrongFlagsyA2CmF":{"name":"wrongFlags","abstract":"

One of the reserved fields in archive has an unexpected value, which can also mean (apart from damaged archive),","parent_name":"GzipError"},"Enums/GzipError.html#/s:13SWCompression9GzipErrorO14wrongHeaderCRCyA2CmF":{"name":"wrongHeaderCRC","abstract":"

Computed CRC of archive’s header doesn’t match the value stored in archive.

","parent_name":"GzipError"},"Enums/GzipError.html#/s:13SWCompression9GzipErrorO8wrongCRCyACSayAA0B7ArchiveC6MemberVGcACmF":{"name":"wrongCRC(_:)","abstract":"

Computed checksum of uncompressed data doesn’t match the value stored in the archive.","parent_name":"GzipError"},"Enums/GzipError.html#/s:13SWCompression9GzipErrorO10wrongISizeyA2CmF":{"name":"wrongISize","abstract":"

Computed ‘isize’ didn’t match the value stored in the archive.

","parent_name":"GzipError"},"Enums/GzipError.html#/s:13SWCompression9GzipErrorO21cannotEncodeISOLatin1yA2CmF":{"name":"cannotEncodeISOLatin1","abstract":"

Either specified file name or comment cannot be encoded using ISO Latin-1 encoding.

","parent_name":"GzipError"},"Enums/DeflateError.html#/s:13SWCompression12DeflateErrorO29wrongUncompressedBlockLengthsyA2CmF":{"name":"wrongUncompressedBlockLengths","abstract":"

Uncompressed block’s length and nlength bytes isn’t consistent with each other.

","parent_name":"DeflateError"},"Enums/DeflateError.html#/s:13SWCompression12DeflateErrorO14wrongBlockTypeyA2CmF":{"name":"wrongBlockType","abstract":"

Unknown block type (not 0, 1 or 2).

","parent_name":"DeflateError"},"Enums/DeflateError.html#/s:13SWCompression12DeflateErrorO11wrongSymbolyA2CmF":{"name":"wrongSymbol","abstract":"

Decoded symbol was found in Huffman tree but is unknown.

","parent_name":"DeflateError"},"Enums/DeflateError.html#/s:13SWCompression12DeflateErrorO14symbolNotFoundyA2CmF":{"name":"symbolNotFound","abstract":"

Symbol wasn’t found in Huffman tree.

","parent_name":"DeflateError"},"Enums/DataError.html#/s:13SWCompression9DataErrorO9truncatedyA2CmF":{"name":"truncated","abstract":"

Indicates that input data is likely truncated or incomplete.

","parent_name":"DataError"},"Enums/DataError.html#/s:13SWCompression9DataErrorO9corruptedyA2CmF":{"name":"corrupted","abstract":"

Indicates that input data is corrupted, e.g. does not conform to the format specifications or contains other","parent_name":"DataError"},"Enums/DataError.html#/s:13SWCompression9DataErrorO16checksumMismatchyACSay10Foundation0B0VGcACmF":{"name":"checksumMismatch(_:)","abstract":"

Indicates that the computed checksum of the output data does not match the stored checksum. While usually the","parent_name":"DataError"},"Enums/DataError.html#/s:13SWCompression9DataErrorO18unsupportedFeatureyA2CmF":{"name":"unsupportedFeature","abstract":"

Indicates that input data was created using a feature that is not supported by the processing function.

","parent_name":"DataError"},"Enums/BZip2Error.html#/s:13SWCompression10BZip2ErrorO10wrongMagicyA2CmF":{"name":"wrongMagic","abstract":"

‘Magic’ number is not 0x425a.

","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:13SWCompression10BZip2ErrorO12wrongVersionyA2CmF":{"name":"wrongVersion","abstract":"

BZip version is not 2.

","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:13SWCompression10BZip2ErrorO14wrongBlockSizeyA2CmF":{"name":"wrongBlockSize","abstract":"

Unsupported block size (not from ‘0’ to ‘9’).

","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:13SWCompression10BZip2ErrorO14wrongBlockTypeyA2CmF":{"name":"wrongBlockType","abstract":"

Unsupported block type (is neither ‘pi’ nor ‘sqrt(pi)’).

","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:13SWCompression10BZip2ErrorO15randomizedBlockyA2CmF":{"name":"randomizedBlock","abstract":"

Block is randomized.

","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:13SWCompression10BZip2ErrorO18wrongHuffmanGroupsyA2CmF":{"name":"wrongHuffmanGroups","abstract":"

Wrong number of Huffman tables/groups (should be between 2 and 6).

","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:13SWCompression10BZip2ErrorO13wrongSelectoryA2CmF":{"name":"wrongSelector","abstract":"

Selector is greater than the total number of Huffman tables/groups.

","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:13SWCompression10BZip2ErrorO22wrongHuffmanCodeLengthyA2CmF":{"name":"wrongHuffmanCodeLength","abstract":"

Wrong length of Huffman code (should be between 0 and 20).

","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:13SWCompression10BZip2ErrorO14symbolNotFoundyA2CmF":{"name":"symbolNotFound","abstract":"

Symbol wasn’t found in Huffman tree.

","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:13SWCompression10BZip2ErrorO8wrongCRCyAC10Foundation4DataVcACmF":{"name":"wrongCRC(_:)","abstract":"

Computed checksum of the uncompressed data does not match the value stored in the archive.","parent_name":"BZip2Error"},"Enums/BZip2Error.html":{"name":"BZip2Error","abstract":"

Represents an error which happened during BZip2 decompression."},"Enums/DataError.html":{"name":"DataError","abstract":"

Represents an error which happened during processing input data.

"},"Enums/DeflateError.html":{"name":"DeflateError","abstract":"

Represents an error which happened during Deflate compression or decompression."},"Enums/GzipError.html":{"name":"GzipError","abstract":"

Represents an error which happened while processing a GZip archive."},"Enums/LZMAError.html":{"name":"LZMAError","abstract":"

Represents an error which happened during LZMA decompression."},"Enums/LZMA2Error.html":{"name":"LZMA2Error","abstract":"

Represents an error which happened during LZMA2 decompression."},"Enums/SevenZipError.html":{"name":"SevenZipError","abstract":"

Represents an error which happened while processing a 7-Zip container."},"Enums/TarCreateError.html":{"name":"TarCreateError","abstract":"

Represents an error which happened during the creation of a new TAR container.

"},"Enums/TarError.html":{"name":"TarError","abstract":"

Represents an error which happened while processing a TAR container."},"Enums/XZError.html":{"name":"XZError","abstract":"

Represents an error which happened while unarchiving an XZ archive."},"Enums/ZipError.html":{"name":"ZipError","abstract":"

Represents an error which happened while processing a ZIP container."},"Enums/ZlibError.html":{"name":"ZlibError","abstract":"

Represents an error which happened while processing a Zlib archive."},"Enums/ZipExtraFieldLocation.html#/s:13SWCompression21ZipExtraFieldLocationO16centralDirectoryyA2CmF":{"name":"centralDirectory","abstract":"

ZIP extra field is located in container’s Central Directory.

","parent_name":"ZipExtraFieldLocation"},"Enums/ZipExtraFieldLocation.html#/s:13SWCompression21ZipExtraFieldLocationO11localHeaderyA2CmF":{"name":"localHeader","abstract":"

ZIP extra field is located in one of container’s Local Headers.

","parent_name":"ZipExtraFieldLocation"},"Protocols/ZipExtraField.html#/s:13SWCompression13ZipExtraFieldP2ids6UInt16VvpZ":{"name":"id","abstract":"

ID of extra field. Must be equal to the key of extra field in ZipContainer.customExtraFields dictionary and","parent_name":"ZipExtraField"},"Protocols/ZipExtraField.html#/s:13SWCompression13ZipExtraFieldP8locationAA0bcD8LocationOvp":{"name":"location","abstract":"

Location of extra field. Must be equal to the value of location argument of init?(_:_:location:).

","parent_name":"ZipExtraField"},"Protocols/ZipExtraField.html#/s:13SWCompression13ZipExtraFieldP4sizeSivp":{"name":"size","abstract":"

Size of extra field’s data. Must be equal to the value of the second argument of init?(_:_:location:).

","parent_name":"ZipExtraField"},"Protocols/ZipExtraField.html#/s:13SWCompression13ZipExtraFieldP__8locationxSg11BitByteData012LittleEndianG6ReaderC_SiAA0bcD8LocationOtcfc":{"name":"init(_:_:location:)","abstract":"

Creates an extra field instance reading size amount of data from byteReader.

","parent_name":"ZipExtraField"},"Protocols/ZipExtraField.html#/s:13SWCompression13ZipExtraFieldPAAE2ids6UInt16Vvp":{"name":"id","abstract":"

ID of extra field. Must be equal to the key of extra field in ZipContainer.customExtraFields dictionary and","parent_name":"ZipExtraField"},"Structs/ZipEntryInfo.html#/s:13SWCompression18ContainerEntryInfoP4nameSSvp":{"name":"name","parent_name":"ZipEntryInfo"},"Structs/ZipEntryInfo.html#/s:13SWCompression18ContainerEntryInfoP4sizeSiSgvp":{"name":"size","parent_name":"ZipEntryInfo"},"Structs/ZipEntryInfo.html#/s:13SWCompression18ContainerEntryInfoP4typeAA0bC4TypeOvp":{"name":"type","parent_name":"ZipEntryInfo"},"Structs/ZipEntryInfo.html#/s:13SWCompression12ZipEntryInfoV10accessTime10Foundation4DateVSgvp":{"name":"accessTime","abstract":"

Entry’s last access time (nil, if not available).

","parent_name":"ZipEntryInfo"},"Structs/ZipEntryInfo.html#/s:13SWCompression12ZipEntryInfoV12creationTime10Foundation4DateVSgvp":{"name":"creationTime","abstract":"

Entry’s creation time (nil, if not available).

","parent_name":"ZipEntryInfo"},"Structs/ZipEntryInfo.html#/s:13SWCompression12ZipEntryInfoV16modificationTime10Foundation4DateVSgvp":{"name":"modificationTime","abstract":"

Entry’s last modification time.

","parent_name":"ZipEntryInfo"},"Structs/ZipEntryInfo.html#/s:13SWCompression12ZipEntryInfoV11permissionsAA11PermissionsVSgvp":{"name":"permissions","abstract":"

Entry’s permissions in POSIX format.","parent_name":"ZipEntryInfo"},"Structs/ZipEntryInfo.html#/s:13SWCompression12ZipEntryInfoV7commentSSvp":{"name":"comment","abstract":"

Entry’s comment.

","parent_name":"ZipEntryInfo"},"Structs/ZipEntryInfo.html#/s:13SWCompression12ZipEntryInfoV22externalFileAttributess6UInt32Vvp":{"name":"externalFileAttributes","abstract":"

Entry’s external file attributes. ZIP internal property.","parent_name":"ZipEntryInfo"},"Structs/ZipEntryInfo.html#/s:13SWCompression12ZipEntryInfoV13dosAttributesAA03DosF0VSgvp":{"name":"dosAttributes","abstract":"

Entry’s attributes in DOS format.

","parent_name":"ZipEntryInfo"},"Structs/ZipEntryInfo.html#/s:13SWCompression12ZipEntryInfoV10isTextFileSbvp":{"name":"isTextFile","abstract":"

True, if entry is likely to be text or ASCII file.

","parent_name":"ZipEntryInfo"},"Structs/ZipEntryInfo.html#/s:13SWCompression12ZipEntryInfoV14fileSystemTypeAA04FilefG0Ovp":{"name":"fileSystemType","abstract":"

File system type of container’s origin.

","parent_name":"ZipEntryInfo"},"Structs/ZipEntryInfo.html#/s:13SWCompression12ZipEntryInfoV17compressionMethodAA011CompressionF0Ovp":{"name":"compressionMethod","abstract":"

Entry’s compression method.

","parent_name":"ZipEntryInfo"},"Structs/ZipEntryInfo.html#/s:13SWCompression12ZipEntryInfoV7ownerIDSiSgvp":{"name":"ownerID","abstract":"

ID of entry’s owner.

","parent_name":"ZipEntryInfo"},"Structs/ZipEntryInfo.html#/s:13SWCompression12ZipEntryInfoV7groupIDSiSgvp":{"name":"groupID","abstract":"

ID of the group of entry’s owner.

","parent_name":"ZipEntryInfo"},"Structs/ZipEntryInfo.html#/s:13SWCompression12ZipEntryInfoV17customExtraFieldsSayAA0bF5Field_pGvp":{"name":"customExtraFields","abstract":"

Entry’s custom extra fields from both Central Directory and Local Header.

","parent_name":"ZipEntryInfo"},"Structs/ZipEntryInfo.html#/s:13SWCompression12ZipEntryInfoV3crcs6UInt32Vvp":{"name":"crc","abstract":"

CRC32 of entry’s data.

","parent_name":"ZipEntryInfo"},"Structs/ZipEntry.html#/s:13SWCompression14ContainerEntryP4info4InfoQzvp":{"name":"info","parent_name":"ZipEntry"},"Structs/ZipEntry.html#/s:13SWCompression14ContainerEntryP4data10Foundation4DataVSgvp":{"name":"data","parent_name":"ZipEntry"},"Classes/ZipContainer.html#/s:13SWCompression12ZipContainerC17customExtraFieldsSDys6UInt16VAA0bE5Field_pXpGvpZ":{"name":"customExtraFields","abstract":"

Contains user-defined extra fields. When either ZipContainer.info(container:) or ZipContainer.open(container:)","parent_name":"ZipContainer"},"Classes/ZipContainer.html#/s:13SWCompression12ZipContainerC4open9containerSayAA0B5EntryVG10Foundation4DataV_tKFZ":{"name":"open(container:)","abstract":"

Processes ZIP container and returns an array of ZipEntry with information and data for all entries.

","parent_name":"ZipContainer"},"Classes/ZipContainer.html#/s:13SWCompression12ZipContainerC4info9containerSayAA0B9EntryInfoVG10Foundation4DataV_tKFZ":{"name":"info(container:)","abstract":"

Processes ZIP container and returns an array of ZipEntryInfo with information about entries in this container.

","parent_name":"ZipContainer"},"Classes/ZipContainer.html":{"name":"ZipContainer","abstract":"

Provides functions for work with ZIP containers.

"},"Structs/ZipEntry.html":{"name":"ZipEntry","abstract":"

Represents an entry from the ZIP container.

"},"Structs/ZipEntryInfo.html":{"name":"ZipEntryInfo","abstract":"

Provides access to information about an entry from the ZIP container.

"},"Protocols/ZipExtraField.html":{"name":"ZipExtraField","abstract":"

A type that represents an extra field from a ZIP container.

"},"Enums/ZipExtraFieldLocation.html":{"name":"ZipExtraFieldLocation","abstract":"

Location of ZIP extra field inside a container.

"},"Structs/TarEntryInfo.html#/s:13SWCompression12TarEntryInfoV4nameSSvp":{"name":"name","abstract":"

Entry’s name.

","parent_name":"TarEntryInfo"},"Structs/TarEntryInfo.html#/s:13SWCompression12TarEntryInfoV4sizeSiSgvp":{"name":"size","abstract":"

Entry’s data size.

","parent_name":"TarEntryInfo"},"Structs/TarEntryInfo.html#/s:13SWCompression18ContainerEntryInfoP4typeAA0bC4TypeOvp":{"name":"type","parent_name":"TarEntryInfo"},"Structs/TarEntryInfo.html#/s:13SWCompression12TarEntryInfoV10accessTime10Foundation4DateVSgvp":{"name":"accessTime","abstract":"

Entry’s last access time (only available for PAX format; nil otherwise).

","parent_name":"TarEntryInfo"},"Structs/TarEntryInfo.html#/s:13SWCompression12TarEntryInfoV12creationTime10Foundation4DateVSgvp":{"name":"creationTime","abstract":"

Entry’s creation time (only available for PAX format; nil otherwise).

","parent_name":"TarEntryInfo"},"Structs/TarEntryInfo.html#/s:13SWCompression12TarEntryInfoV16modificationTime10Foundation4DateVSgvp":{"name":"modificationTime","abstract":"

Entry’s last modification time.

","parent_name":"TarEntryInfo"},"Structs/TarEntryInfo.html#/s:13SWCompression18ContainerEntryInfoP11permissionsAA11PermissionsVSgvp":{"name":"permissions","parent_name":"TarEntryInfo"},"Structs/TarEntryInfo.html#/s:13SWCompression12TarEntryInfoV17compressionMethodAA011CompressionF0Ovp":{"name":"compressionMethod","abstract":"

Entry’s compression method. Always .copy for the entries of TAR containers.

","parent_name":"TarEntryInfo"},"Structs/TarEntryInfo.html#/s:13SWCompression12TarEntryInfoV7ownerIDSiSgvp":{"name":"ownerID","abstract":"

ID of entry’s owner.

","parent_name":"TarEntryInfo"},"Structs/TarEntryInfo.html#/s:13SWCompression12TarEntryInfoV7groupIDSiSgvp":{"name":"groupID","abstract":"

ID of the group of entry’s owner.

","parent_name":"TarEntryInfo"},"Structs/TarEntryInfo.html#/s:13SWCompression12TarEntryInfoV13ownerUserNameSSSgvp":{"name":"ownerUserName","abstract":"

User name of entry’s owner.

","parent_name":"TarEntryInfo"},"Structs/TarEntryInfo.html#/s:13SWCompression12TarEntryInfoV14ownerGroupNameSSSgvp":{"name":"ownerGroupName","abstract":"

Name of the group of entry’s owner.

","parent_name":"TarEntryInfo"},"Structs/TarEntryInfo.html#/s:13SWCompression12TarEntryInfoV17deviceMajorNumberSiSgvp":{"name":"deviceMajorNumber","abstract":"

Device major number (used when entry is either block or character special file).

","parent_name":"TarEntryInfo"},"Structs/TarEntryInfo.html#/s:13SWCompression12TarEntryInfoV17deviceMinorNumberSiSgvp":{"name":"deviceMinorNumber","abstract":"

Device minor number (used when entry is either block or character special file).

","parent_name":"TarEntryInfo"},"Structs/TarEntryInfo.html#/s:13SWCompression12TarEntryInfoV7charsetSSSgvp":{"name":"charset","abstract":"

Name of the character set used to encode entry’s data (only available for PAX format; nil otherwise).

","parent_name":"TarEntryInfo"},"Structs/TarEntryInfo.html#/s:13SWCompression12TarEntryInfoV7commentSSSgvp":{"name":"comment","abstract":"

Entry’s comment (only available for PAX format; nil otherwise).

","parent_name":"TarEntryInfo"},"Structs/TarEntryInfo.html#/s:13SWCompression12TarEntryInfoV8linkNameSSvp":{"name":"linkName","abstract":"

Path to a linked file for symbolic link entry.

","parent_name":"TarEntryInfo"},"Structs/TarEntryInfo.html#/s:13SWCompression12TarEntryInfoV28unknownExtendedHeaderRecordsSDyS2SGSgvp":{"name":"unknownExtendedHeaderRecords","abstract":"

All custom (unknown) records from global and local PAX extended headers. nil, if there were no headers.

","parent_name":"TarEntryInfo"},"Structs/TarEntryInfo.html#/s:13SWCompression12TarEntryInfoV4name4typeACSS_AA09ContainerC4TypeOtcfc":{"name":"init(name:type:)","abstract":"

Initializes the entry’s info with its name and type.

","parent_name":"TarEntryInfo"},"Structs/TarEntry.html#/s:13SWCompression14ContainerEntryP4info4InfoQzvp":{"name":"info","parent_name":"TarEntry"},"Structs/TarEntry.html#/s:13SWCompression8TarEntryV4data10Foundation4DataVSgvp":{"name":"data","abstract":"

Entry’s data (nil if entry is a directory or data isn’t available).

","parent_name":"TarEntry"},"Structs/TarEntry.html#/s:13SWCompression8TarEntryV4info4dataAcA0bC4InfoV_10Foundation4DataVSgtcfc":{"name":"init(info:data:)","abstract":"

Initializes the entry with its info and data. The stored info.size will also be updated to be equal to","parent_name":"TarEntry"},"Structs/TarWriter.html#/s:13SWCompression9TarWriterV10fileHandle5forceACSo06NSFileE0C_AA0B9ContainerC6FormatOtcfc":{"name":"init(fileHandle:force:)","abstract":"

Creates a new instance for writing TAR entries using the specified format into the provided fileHandle.

","parent_name":"TarWriter"},"Structs/TarWriter.html#/s:13SWCompression9TarWriterV6appendyyAA0B5EntryVKF":{"name":"append(_:)","abstract":"

Adds a new TAR entry at the end of the TAR container.

","parent_name":"TarWriter"},"Structs/TarWriter.html#/s:13SWCompression9TarWriterV8finalizeyyKF":{"name":"finalize()","abstract":"

Finalizes the TAR container by adding an EOF marker.

","parent_name":"TarWriter"},"Structs/TarReader.html#/s:13SWCompression9TarReaderV10fileHandleACSo06NSFileE0C_tcfc":{"name":"init(fileHandle:)","abstract":"

Creates a new instance for reading TAR entries from the provided fileHandle.

","parent_name":"TarReader"},"Structs/TarReader.html#/s:13SWCompression9TarReaderV7processyxxAA0B5EntryVSgKXEKlF":{"name":"process(_:)","abstract":"

Processes the next TAR entry by reading it from the container and calling the provided closure on the result. If","parent_name":"TarReader"},"Structs/TarReader.html#/s:13SWCompression9TarReaderV4readAA0B5EntryVSgyKF":{"name":"read()","abstract":"

Reads the next TAR entry from the container.

","parent_name":"TarReader"},"Classes/TarContainer/Format.html#/s:13SWCompression12TarContainerC6FormatO8prePosixyA2EmF":{"name":"prePosix","abstract":"

Pre POSIX format (aka “basic TAR format”).

","parent_name":"Format"},"Classes/TarContainer/Format.html#/s:13SWCompression12TarContainerC6FormatO5ustaryA2EmF":{"name":"ustar","abstract":"

“UStar” format introduced by POSIX IEEE P1003.1 standard.

","parent_name":"Format"},"Classes/TarContainer/Format.html#/s:13SWCompression12TarContainerC6FormatO3gnuyA2EmF":{"name":"gnu","abstract":"

“UStar”-like format with GNU extensions (e.g. special container entries for long file and link names).

","parent_name":"Format"},"Classes/TarContainer/Format.html#/s:13SWCompression12TarContainerC6FormatO3paxyA2EmF":{"name":"pax","abstract":"

“PAX” format introduced by POSIX.1-2001 standard, a set of extensions to “UStar” format.

","parent_name":"Format"},"Classes/TarContainer/Format.html":{"name":"Format","abstract":"

Represents the “format” of a TAR container: a minimal set of extensions to basic TAR format required to","parent_name":"TarContainer"},"Classes/TarContainer.html#/s:13SWCompression12TarContainerC8formatOf9containerAC6FormatO10Foundation4DataV_tKFZ":{"name":"formatOf(container:)","abstract":"

Processes TAR container and returns its “format”: a minimal set of extensions to basic TAR format required to","parent_name":"TarContainer"},"Classes/TarContainer.html#/s:13SWCompression12TarContainerC6create4from10Foundation4DataVSayAA0B5EntryVG_tFZ":{"name":"create(from:)","abstract":"

Creates a new TAR container with entries as its content and generates its Data.

","parent_name":"TarContainer"},"Classes/TarContainer.html#/s:13SWCompression12TarContainerC6create4from5force10Foundation4DataVSayAA0B5EntryVG_AC6FormatOtFZ":{"name":"create(from:force:)","abstract":"

Creates a new TAR container with entries as its content and generates its Data using the specified format.

","parent_name":"TarContainer"},"Classes/TarContainer.html#/s:13SWCompression12TarContainerC4open9containerSayAA0B5EntryVG10Foundation4DataV_tKFZ":{"name":"open(container:)","abstract":"

Processes TAR container and returns an array of TarEntry with information and data for all entries.

","parent_name":"TarContainer"},"Classes/TarContainer.html#/s:13SWCompression12TarContainerC4info9containerSayAA0B9EntryInfoVG10Foundation4DataV_tKFZ":{"name":"info(container:)","abstract":"

Processes TAR container and returns an array of TarEntryInfo with information about entries in this container.

","parent_name":"TarContainer"},"Classes/TarContainer.html":{"name":"TarContainer","abstract":"

Provides functions for work with TAR containers.

"},"Structs/TarReader.html":{"name":"TarReader","abstract":"

A type that allows to iteratively read TAR entries from a container provided by a FileHandle.

"},"Structs/TarWriter.html":{"name":"TarWriter","abstract":"

A type that allows to iteratively create TAR containers with the output being written into a FileHandle.

"},"Structs/TarEntry.html":{"name":"TarEntry","abstract":"

Represents an entry from the TAR container.

"},"Structs/TarEntryInfo.html":{"name":"TarEntryInfo","abstract":"

Provides access to information about an entry from the TAR container.

"},"Structs/SevenZipEntryInfo.html#/s:13SWCompression18ContainerEntryInfoP4nameSSvp":{"name":"name","parent_name":"SevenZipEntryInfo"},"Structs/SevenZipEntryInfo.html#/s:13SWCompression18ContainerEntryInfoP4sizeSiSgvp":{"name":"size","parent_name":"SevenZipEntryInfo"},"Structs/SevenZipEntryInfo.html#/s:13SWCompression18ContainerEntryInfoP4typeAA0bC4TypeOvp":{"name":"type","parent_name":"SevenZipEntryInfo"},"Structs/SevenZipEntryInfo.html#/s:13SWCompression18ContainerEntryInfoP10accessTime10Foundation4DateVSgvp":{"name":"accessTime","parent_name":"SevenZipEntryInfo"},"Structs/SevenZipEntryInfo.html#/s:13SWCompression18ContainerEntryInfoP12creationTime10Foundation4DateVSgvp":{"name":"creationTime","parent_name":"SevenZipEntryInfo"},"Structs/SevenZipEntryInfo.html#/s:13SWCompression18ContainerEntryInfoP16modificationTime10Foundation4DateVSgvp":{"name":"modificationTime","parent_name":"SevenZipEntryInfo"},"Structs/SevenZipEntryInfo.html#/s:13SWCompression18ContainerEntryInfoP11permissionsAA11PermissionsVSgvp":{"name":"permissions","parent_name":"SevenZipEntryInfo"},"Structs/SevenZipEntryInfo.html#/s:13SWCompression17SevenZipEntryInfoV13winAttributess6UInt32VSgvp":{"name":"winAttributes","abstract":"

Entry’s “win attributes”. 7-Zip internal property.","parent_name":"SevenZipEntryInfo"},"Structs/SevenZipEntryInfo.html#/s:13SWCompression17SevenZipEntryInfoV13dosAttributesAA03DosG0VSgvp":{"name":"dosAttributes","abstract":"

Entry’s attributes in DOS format.

","parent_name":"SevenZipEntryInfo"},"Structs/SevenZipEntryInfo.html#/s:13SWCompression17SevenZipEntryInfoV9hasStreamSbvp":{"name":"hasStream","abstract":"

True, if entry has a stream (data) inside the container. 7-Zip internal propety.

","parent_name":"SevenZipEntryInfo"},"Structs/SevenZipEntryInfo.html#/s:13SWCompression17SevenZipEntryInfoV7isEmptySbvp":{"name":"isEmpty","abstract":"

True, if entry is an empty file. 7-Zip internal property.

","parent_name":"SevenZipEntryInfo"},"Structs/SevenZipEntryInfo.html#/s:13SWCompression17SevenZipEntryInfoV6isAntiSbvp":{"name":"isAnti","abstract":"

True, if entry is an anti-file. Used in differential backups to indicate that file should be deleted.","parent_name":"SevenZipEntryInfo"},"Structs/SevenZipEntryInfo.html#/s:13SWCompression17SevenZipEntryInfoV3crcs6UInt32VSgvp":{"name":"crc","abstract":"

CRC32 of entry’s data.

","parent_name":"SevenZipEntryInfo"},"Structs/SevenZipEntry.html#/s:13SWCompression14ContainerEntryP4info4InfoQzvp":{"name":"info","parent_name":"SevenZipEntry"},"Structs/SevenZipEntry.html#/s:13SWCompression14ContainerEntryP4data10Foundation4DataVSgvp":{"name":"data","parent_name":"SevenZipEntry"},"Classes/SevenZipContainer.html#/s:13SWCompression17SevenZipContainerC4open9containerSayAA0bC5EntryVG10Foundation4DataV_tKFZ":{"name":"open(container:)","abstract":"

Processes 7-Zip container and returns an array of SevenZipEntry with information and data for all entries.

","parent_name":"SevenZipContainer"},"Classes/SevenZipContainer.html#/s:13SWCompression17SevenZipContainerC4info9containerSayAA0bC9EntryInfoVG10Foundation4DataV_tKFZ":{"name":"info(container:)","abstract":"

Processes 7-Zip container and returns an array of SevenZipEntryInfo with information about entries in this","parent_name":"SevenZipContainer"},"Classes/SevenZipContainer.html":{"name":"SevenZipContainer","abstract":"

Provides functions for work with 7-Zip containers.

"},"Structs/SevenZipEntry.html":{"name":"SevenZipEntry","abstract":"

Represents an entry from the 7-Zip container.

"},"Structs/SevenZipEntryInfo.html":{"name":"SevenZipEntryInfo","abstract":"

Provides access to information about an entry from the 7-Zip container.

"},"Structs/ZlibHeader/CompressionLevel.html#/s:13SWCompression10ZlibHeaderV16CompressionLevelO16fastestAlgorithmyA2EmF":{"name":"fastestAlgorithm","abstract":"

Fastest algorithm.

","parent_name":"CompressionLevel"},"Structs/ZlibHeader/CompressionLevel.html#/s:13SWCompression10ZlibHeaderV16CompressionLevelO13fastAlgorithmyA2EmF":{"name":"fastAlgorithm","abstract":"

Fast algorithm.

","parent_name":"CompressionLevel"},"Structs/ZlibHeader/CompressionLevel.html#/s:13SWCompression10ZlibHeaderV16CompressionLevelO16defaultAlgorithmyA2EmF":{"name":"defaultAlgorithm","abstract":"

Default algorithm.

","parent_name":"CompressionLevel"},"Structs/ZlibHeader/CompressionLevel.html#/s:13SWCompression10ZlibHeaderV16CompressionLevelO13slowAlgorithmyA2EmF":{"name":"slowAlgorithm","abstract":"

Slowest algorithm but with maximum compression.

","parent_name":"CompressionLevel"},"Structs/ZlibHeader/CompressionLevel.html":{"name":"CompressionLevel","abstract":"

Levels of compression which can be used to create Zlib archive.

","parent_name":"ZlibHeader"},"Structs/ZlibHeader.html#/s:13SWCompression10ZlibHeaderV17compressionMethodAA011CompressionE0Ovp":{"name":"compressionMethod","abstract":"

Compression method of archive. Always .deflate for Zlib archives.

","parent_name":"ZlibHeader"},"Structs/ZlibHeader.html#/s:13SWCompression10ZlibHeaderV16compressionLevelAC011CompressionE0Ovp":{"name":"compressionLevel","abstract":"

Level of compression used in archive.

","parent_name":"ZlibHeader"},"Structs/ZlibHeader.html#/s:13SWCompression10ZlibHeaderV10windowSizeSivp":{"name":"windowSize","abstract":"

Size of ‘window’: moving interval of data which was used to make archive.

","parent_name":"ZlibHeader"},"Structs/ZlibHeader.html#/s:13SWCompression10ZlibHeaderV7archiveAC10Foundation4DataV_tKcfc":{"name":"init(archive:)","abstract":"

Initializes the structure with the values from Zlib archive.

","parent_name":"ZlibHeader"},"Classes/ZlibArchive.html#/s:13SWCompression11ZlibArchiveC9unarchive7archive10Foundation4DataVAH_tKFZ":{"name":"unarchive(archive:)","abstract":"

Unarchives Zlib archive.

","parent_name":"ZlibArchive"},"Classes/ZlibArchive.html#/s:13SWCompression11ZlibArchiveC7archive4data10Foundation4DataVAH_tFZ":{"name":"archive(data:)","abstract":"

Archives data into Zlib archive. Data will be also compressed with Deflate algorithm.","parent_name":"ZlibArchive"},"Classes/XZArchive.html#/s:13SWCompression9XZArchiveC9unarchive7archive10Foundation4DataVAH_tKFZ":{"name":"unarchive(archive:)","abstract":"

Unarchives XZ archive. Archives with multiple streams are supported,","parent_name":"XZArchive"},"Classes/XZArchive.html#/s:13SWCompression9XZArchiveC14splitUnarchive7archiveSay10Foundation4DataVGAH_tKFZ":{"name":"splitUnarchive(archive:)","abstract":"

Unarchives XZ archive. Archives with multiple streams are supported,","parent_name":"XZArchive"},"Structs/GzipHeader/ExtraField.html#/s:13SWCompression10GzipHeaderV10ExtraFieldV3si1s5UInt8Vvp":{"name":"si1","abstract":"

First byte of the extra field (subfield) ID.

","parent_name":"ExtraField"},"Structs/GzipHeader/ExtraField.html#/s:13SWCompression10GzipHeaderV10ExtraFieldV3si2s5UInt8Vvp":{"name":"si2","abstract":"

Second byte of the extra field (subfield) ID.

","parent_name":"ExtraField"},"Structs/GzipHeader/ExtraField.html#/s:13SWCompression10GzipHeaderV10ExtraFieldV5bytesSays5UInt8VGvp":{"name":"bytes","abstract":"

Binary content of the extra field.

","parent_name":"ExtraField"},"Structs/GzipHeader/ExtraField.html#/s:13SWCompression10GzipHeaderV10ExtraFieldVyAEs5UInt8V_AGSayAGGtcfc":{"name":"init(_:_:_:)","abstract":"

Initializes an extra field with the specified extra field (subfield) ID bytes and its binary content.

","parent_name":"ExtraField"},"Structs/GzipHeader.html#/s:13SWCompression10GzipHeaderV17compressionMethodAA011CompressionE0Ovp":{"name":"compressionMethod","abstract":"

Compression method of archive. Always .deflate for GZip archives.

","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:13SWCompression10GzipHeaderV16modificationTime10Foundation4DateVSgvp":{"name":"modificationTime","abstract":"

The most recent modification time of the original file. If corresponding archive’s field is set to 0, which means","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:13SWCompression10GzipHeaderV6osTypeAA010FileSystemE0Ovp":{"name":"osType","abstract":"

Type of file system on which archivation took place.

","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:13SWCompression10GzipHeaderV8fileNameSSSgvp":{"name":"fileName","abstract":"

Name of the original file. If archive doesn’t contain file’s name, then nil.

","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:13SWCompression10GzipHeaderV7commentSSSgvp":{"name":"comment","abstract":"

Comment stored in archive. If archive doesn’t contain any comment, then nil.

","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:13SWCompression10GzipHeaderV10isTextFileSbvp":{"name":"isTextFile","abstract":"

True, if file is likely to be text file or ASCII-file.

","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:13SWCompression10GzipHeaderV11extraFieldsSayAC10ExtraFieldVGvp":{"name":"extraFields","abstract":"

Extra fields present in the header.

","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:13SWCompression10GzipHeaderV7archiveAC10Foundation4DataV_tKcfc":{"name":"init(archive:)","abstract":"

Initializes the structure with the values from the first ‘member’ of GZip archive.

","parent_name":"GzipHeader"},"Structs/GzipHeader/ExtraField.html":{"name":"ExtraField","abstract":"

Represents an extra field in the header of a GZip archive.

","parent_name":"GzipHeader"},"Classes/GzipArchive/Member.html#/s:13SWCompression11GzipArchiveC6MemberV6headerAA0B6HeaderVvp":{"name":"header","abstract":"

GZip header of a member.

","parent_name":"Member"},"Classes/GzipArchive/Member.html#/s:13SWCompression11GzipArchiveC6MemberV4data10Foundation4DataVvp":{"name":"data","abstract":"

Unarchived data from a member.

","parent_name":"Member"},"Classes/GzipArchive/Member.html":{"name":"Member","abstract":"

Represents the member of a multi-member GZip archive.

","parent_name":"GzipArchive"},"Classes/GzipArchive.html#/s:13SWCompression11GzipArchiveC9unarchive7archive10Foundation4DataVAH_tKFZ":{"name":"unarchive(archive:)","abstract":"

Unarchives GZip archive.

","parent_name":"GzipArchive"},"Classes/GzipArchive.html#/s:13SWCompression11GzipArchiveC14multiUnarchive7archiveSayAC6MemberVG10Foundation4DataV_tKFZ":{"name":"multiUnarchive(archive:)","abstract":"

Unarchives multi-member GZip archive.","parent_name":"GzipArchive"},"Classes/GzipArchive.html#/s:13SWCompression11GzipArchiveC7archive4data7comment8fileName14writeHeaderCRC10isTextFile6osType16modificationTime11extraFields10Foundation4DataVAO_SSSgAPS2bAA0n6SystemP0OSgAM4DateVSgSayAA0bJ0V10ExtraFieldVGtKFZ":{"name":"archive(data:comment:fileName:writeHeaderCRC:isTextFile:osType:modificationTime:extraFields:)","abstract":"

Archives data into GZip archive, using various specified options.","parent_name":"GzipArchive"},"Classes/GzipArchive.html":{"name":"GzipArchive","abstract":"

Provides unarchive and archive functions for GZip archives.

"},"Structs/GzipHeader.html":{"name":"GzipHeader","abstract":"

Represents the header of a GZip archive.

"},"Classes/XZArchive.html":{"name":"XZArchive","abstract":"

Provides unarchive function for XZ archives.

"},"Classes/ZlibArchive.html":{"name":"ZlibArchive","abstract":"

Provides unarchive and archive functions for Zlib archives.

"},"Structs/ZlibHeader.html":{"name":"ZlibHeader","abstract":"

Represents the header of a Zlib archive.

"},"Enums/LZ4.html#/s:13SWCompression3LZ4O10decompress4data10Foundation4DataVAH_tKFZ":{"name":"decompress(data:)","abstract":"

Decompresses data using LZ4 algortihm.

","parent_name":"LZ4"},"Enums/LZ4.html#/s:13SWCompression3LZ4O10decompress4data10dictionary0E2ID10Foundation4DataVAJ_AJSgs6UInt32VSgtKFZ":{"name":"decompress(data:dictionary:dictionaryID:)","abstract":"

Decompresses data using LZ4 algortihm and provided external dictionary.

","parent_name":"LZ4"},"Enums/LZ4.html#/s:13SWCompression3LZ4O15multiDecompress4data10dictionary0F2IDSay10Foundation4DataVGAJ_AJSgs6UInt32VSgtKFZ":{"name":"multiDecompress(data:dictionary:dictionaryID:)","abstract":"

Decompresses data, which may represent several concatenated LZ4 frames, using LZ4 algortihm and provided external","parent_name":"LZ4"},"Enums/LZ4.html#/s:13SWCompression3LZ4O8compress4data10Foundation4DataVAH_tFZ":{"name":"compress(data:)","abstract":"

Compresses data using LZ4 algortihm with default format and algorithm options.

","parent_name":"LZ4"},"Enums/LZ4.html#/s:13SWCompression3LZ4O8compress4data17independentBlocks14blockChecksums15contentChecksum0I4Size0gK010dictionary0L2ID10Foundation4DataVAO_S4bSiAOSgs6UInt32VSgtFZ":{"name":"compress(data:independentBlocks:blockChecksums:contentChecksum:contentSize:blockSize:dictionary:dictionaryID:)","abstract":"

Compresses data using LZ4 algortihm.

","parent_name":"LZ4"},"Classes/LZMA2.html#/s:13SWCompression5LZMA2C10decompress4data10Foundation4DataVAH_tKFZ":{"name":"decompress(data:)","abstract":"

Decompresses data using LZMA2 algortihm.

","parent_name":"LZMA2"},"Structs/LZMAProperties.html#/s:13SWCompression14LZMAPropertiesV2lcSivp":{"name":"lc","abstract":"

Number of bits used for the literal encoding context. Default value is 3.

","parent_name":"LZMAProperties"},"Structs/LZMAProperties.html#/s:13SWCompression14LZMAPropertiesV2lpSivp":{"name":"lp","abstract":"

Number of bits to include in “literal position state”. Default value is 0.

","parent_name":"LZMAProperties"},"Structs/LZMAProperties.html#/s:13SWCompression14LZMAPropertiesV2pbSivp":{"name":"pb","abstract":"

Number of bits to include in “position state”. Default value is 2.

","parent_name":"LZMAProperties"},"Structs/LZMAProperties.html#/s:13SWCompression14LZMAPropertiesV14dictionarySizeSivp":{"name":"dictionarySize","abstract":"

Size of the dictionary. Default value is 1 << 24.

","parent_name":"LZMAProperties"},"Structs/LZMAProperties.html#/s:13SWCompression14LZMAPropertiesV2lc2lp2pb14dictionarySizeACSi_S3itcfc":{"name":"init(lc:lp:pb:dictionarySize:)","abstract":"

Initializes LZMA properties with values of lc, lp, pb, and dictionary size.

","parent_name":"LZMAProperties"},"Structs/LZMAProperties.html#/s:13SWCompression14LZMAPropertiesVACycfc":{"name":"init()","abstract":"

Initializes LZMA properties with default values of lc, lp, pb, and dictionary size.

","parent_name":"LZMAProperties"},"Classes/LZMA.html#/s:13SWCompression4LZMAC10decompress4data10Foundation4DataVAH_tKFZ":{"name":"decompress(data:)","abstract":"

Decompresses data using LZMA.

","parent_name":"LZMA"},"Classes/LZMA.html#/s:13SWCompression4LZMAC10decompress4data10properties16uncompressedSize10Foundation4DataVAJ_AA14LZMAPropertiesVSiSgtKFZ":{"name":"decompress(data:properties:uncompressedSize:)","abstract":"

Decompresses data using LZMA with specified algorithm’s properties, and, optionally, output’s","parent_name":"LZMA"},"Classes/Deflate.html#/s:13SWCompression7DeflateC10decompress4data10Foundation4DataVAH_tKFZ":{"name":"decompress(data:)","abstract":"

Decompresses data using Deflate algortihm.

","parent_name":"Deflate"},"Classes/Deflate.html#/s:13SWCompression7DeflateC8compress4data10Foundation4DataVAH_tFZ":{"name":"compress(data:)","abstract":"

Compresses data with Deflate algortihm.

","parent_name":"Deflate"},"Classes/BZip2/BlockSize.html#/s:13SWCompression5BZip2C9BlockSizeO3oneyA2EmF":{"name":"one","abstract":"

100 KB.

","parent_name":"BlockSize"},"Classes/BZip2/BlockSize.html#/s:13SWCompression5BZip2C9BlockSizeO3twoyA2EmF":{"name":"two","abstract":"

200 KB.

","parent_name":"BlockSize"},"Classes/BZip2/BlockSize.html#/s:13SWCompression5BZip2C9BlockSizeO5threeyA2EmF":{"name":"three","abstract":"

300 KB.

","parent_name":"BlockSize"},"Classes/BZip2/BlockSize.html#/s:13SWCompression5BZip2C9BlockSizeO4fouryA2EmF":{"name":"four","abstract":"

400 KB.

","parent_name":"BlockSize"},"Classes/BZip2/BlockSize.html#/s:13SWCompression5BZip2C9BlockSizeO4fiveyA2EmF":{"name":"five","abstract":"

500 KB.

","parent_name":"BlockSize"},"Classes/BZip2/BlockSize.html#/s:13SWCompression5BZip2C9BlockSizeO3sixyA2EmF":{"name":"six","abstract":"

600 KB.

","parent_name":"BlockSize"},"Classes/BZip2/BlockSize.html#/s:13SWCompression5BZip2C9BlockSizeO5sevenyA2EmF":{"name":"seven","abstract":"

700 KB.

","parent_name":"BlockSize"},"Classes/BZip2/BlockSize.html#/s:13SWCompression5BZip2C9BlockSizeO5eightyA2EmF":{"name":"eight","abstract":"

800 KB.

","parent_name":"BlockSize"},"Classes/BZip2/BlockSize.html#/s:13SWCompression5BZip2C9BlockSizeO4nineyA2EmF":{"name":"nine","abstract":"

900 KB.

","parent_name":"BlockSize"},"Classes/BZip2.html#/s:13SWCompression5BZip2C10decompress4data10Foundation4DataVAH_tKFZ":{"name":"decompress(data:)","abstract":"

Decompresses data using BZip2 algortihm.

","parent_name":"BZip2"},"Classes/BZip2.html#/s:13SWCompression5BZip2C15multiDecompress4dataSay10Foundation4DataVGAH_tKFZ":{"name":"multiDecompress(data:)","abstract":"

Decompresses one or more concatenated BZip2 archives found in data.

","parent_name":"BZip2"},"Classes/BZip2/BlockSize.html":{"name":"BlockSize","abstract":"

Represents the size of the blocks in which data is split during BZip2 compression.

","parent_name":"BZip2"},"Classes/BZip2.html#/s:13SWCompression5BZip2C8compress4data10Foundation4DataVAH_tFZ":{"name":"compress(data:)","abstract":"

Compresses data with BZip2 algortihm.

","parent_name":"BZip2"},"Classes/BZip2.html#/s:13SWCompression5BZip2C8compress4data9blockSize10Foundation4DataVAI_AC05BlockF0OtFZ":{"name":"compress(data:blockSize:)","abstract":"

Compresses data with BZip2 algortihm, splitting data into blocks of specified blockSize.

","parent_name":"BZip2"},"Classes/BZip2.html":{"name":"BZip2","abstract":"

Provides functions for compression and decompression for BZip2 algorithm.

"},"Classes/Deflate.html":{"name":"Deflate","abstract":"

Provides functions for compression and decompression for Deflate algorithm.

"},"Classes/LZMA.html":{"name":"LZMA","abstract":"

Provides decompression function for LZMA.

"},"Structs/LZMAProperties.html":{"name":"LZMAProperties","abstract":"

Properties of LZMA. This API is intended to be used by advanced users.

"},"Classes/LZMA2.html":{"name":"LZMA2","abstract":"

Provides decompression function for LZMA2 algorithm.

"},"Enums/LZ4.html":{"name":"LZ4","abstract":"

Provides functions for compression and decompression for LZ4 algorithm.

"},"Compression.html":{"name":"Compression"},"Archives.html":{"name":"Archives"},"7-Zip.html":{"name":"7-Zip"},"TAR.html":{"name":"TAR"},"ZIP.html":{"name":"ZIP"},"Errors.html":{"name":"Errors"},"Protocols.html":{"name":"Protocols"},"Common%20Auxiliary%20Types.html":{"name":"Common Auxiliary Types"}} \ No newline at end of file diff --git a/undocumented.json b/undocumented.json new file mode 100644 index 00000000..f42809e0 --- /dev/null +++ b/undocumented.json @@ -0,0 +1,4 @@ +{ + "warnings": [], + "source_directory": "/Users/runner/work/1/s" +} \ No newline at end of file