From ec4a6d8a2a3446c9ebf8eabe81bf869bb3b26a47 Mon Sep 17 00:00:00 2001 From: Timofey Solomko Date: Sun, 12 Feb 2017 10:58:27 +0300 Subject: [PATCH] 2.2.0 testing release. --- .jazzy.yaml | 4 +- CHANGELOG.md | 5 + SWCompression.podspec | 4 +- Sources/Service/Info-iOS.plist | 2 +- Sources/Service/Info-tvOS.plist | 2 +- Sources/Service/Info-watchOS.plist | 2 +- Sources/Service/Info.plist | 2 +- docs/Classes.html | 32 +- docs/Classes/BZip2.html | 30 +- docs/Classes/Deflate.html | 60 +- docs/Classes/GzipArchive.html | 30 +- docs/Classes/LZMA.html | 30 +- docs/Classes/LZMA2.html | 30 +- docs/Classes/XZArchive.html | 30 +- docs/Classes/ZipContainer.html | 120 +- docs/Classes/ZlibArchive.html | 30 +- docs/Enums.html | 32 +- docs/Enums/BZip2Error.html | 34 +- docs/Enums/DeflateError.html | 24 +- docs/Enums/GzipError.html | 28 +- docs/Enums/LZMA2Error.html | 26 +- docs/Enums/LZMAError.html | 30 +- docs/Enums/XZError.html | 36 +- docs/Enums/ZipError.html | 36 +- docs/Enums/ZlibError.html | 26 +- docs/Protocols.html | 20 +- docs/Protocols/Archive.html | 18 +- docs/Protocols/DecompressionAlgorithm.html | 18 +- docs/Structs.html | 47 +- docs/Structs/GzipHeader.html | 38 +- .../Structs/GzipHeader/CompressionMethod.html | 18 +- docs/Structs/GzipHeader/FileSystemType.html | 26 +- docs/Structs/ZipEntry.html | 243 +++ docs/Structs/ZlibHeader.html | 34 +- docs/Structs/ZlibHeader/CompressionLevel.html | 24 +- .../Structs/ZlibHeader/CompressionMethod.html | 18 +- docs/badge.svg | 1 + docs/css/jazzy.css | 39 + .../Contents/Resources/Documents/Classes.html | 32 +- .../Resources/Documents/Classes/BZip2.html | 30 +- .../Resources/Documents/Classes/Deflate.html | 60 +- .../Documents/Classes/GzipArchive.html | 30 +- .../Resources/Documents/Classes/LZMA.html | 30 +- .../Resources/Documents/Classes/LZMA2.html | 30 +- .../Documents/Classes/XZArchive.html | 30 +- .../Documents/Classes/ZipContainer.html | 120 +- .../Documents/Classes/ZlibArchive.html | 30 +- .../Contents/Resources/Documents/Enums.html | 32 +- .../Resources/Documents/Enums/BZip2Error.html | 34 +- .../Documents/Enums/DeflateError.html | 24 +- .../Resources/Documents/Enums/GzipError.html | 28 +- .../Resources/Documents/Enums/LZMA2Error.html | 26 +- .../Resources/Documents/Enums/LZMAError.html | 30 +- .../Resources/Documents/Enums/XZError.html | 36 +- .../Resources/Documents/Enums/ZipError.html | 36 +- .../Resources/Documents/Enums/ZlibError.html | 26 +- .../Resources/Documents/Protocols.html | 20 +- .../Documents/Protocols/Archive.html | 18 +- .../Protocols/DecompressionAlgorithm.html | 18 +- .../Contents/Resources/Documents/Structs.html | 47 +- .../Documents/Structs/GzipHeader.html | 38 +- .../Structs/GzipHeader/CompressionMethod.html | 18 +- .../Structs/GzipHeader/FileSystemType.html | 26 +- .../Resources/Documents/Structs/ZipEntry.html | 243 +++ .../Documents/Structs/ZlibHeader.html | 34 +- .../Structs/ZlibHeader/CompressionLevel.html | 24 +- .../Structs/ZlibHeader/CompressionMethod.html | 18 +- .../Resources/Documents/css/jazzy.css | 39 + .../Resources/Documents/img/spinner.gif | Bin 0 -> 1849 bytes .../Contents/Resources/Documents/index.html | 16 +- .../Contents/Resources/Documents/js/jazzy.js | 6 + .../Resources/Documents/js/jazzy.search.js | 62 + .../Resources/Documents/js/lunr.min.js | 6 + .../Documents/js/typeahead.jquery.js | 1538 +++++++++++++++++ .../Contents/Resources/Documents/search.json | 1 + .../Resources/Documents/undocumented.json | 57 +- .../Contents/Resources/docSet.dsidx | Bin 36864 -> 45056 bytes docs/docsets/SWCompression.tgz | Bin 70598 -> 98153 bytes docs/img/spinner.gif | Bin 0 -> 1849 bytes docs/index.html | 16 +- docs/js/jazzy.js | 6 + docs/js/jazzy.search.js | 62 + docs/js/lunr.min.js | 6 + docs/js/typeahead.jquery.js | 1538 +++++++++++++++++ docs/search.json | 1 + docs/undocumented.json | 57 +- 86 files changed, 5244 insertions(+), 564 deletions(-) create mode 100644 docs/Structs/ZipEntry.html create mode 100644 docs/badge.svg create mode 100644 docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZipEntry.html create mode 100644 docs/docsets/SWCompression.docset/Contents/Resources/Documents/img/spinner.gif create mode 100644 docs/docsets/SWCompression.docset/Contents/Resources/Documents/js/jazzy.search.js create mode 100755 docs/docsets/SWCompression.docset/Contents/Resources/Documents/js/lunr.min.js create mode 100644 docs/docsets/SWCompression.docset/Contents/Resources/Documents/js/typeahead.jquery.js create mode 100644 docs/docsets/SWCompression.docset/Contents/Resources/Documents/search.json create mode 100644 docs/img/spinner.gif create mode 100644 docs/js/jazzy.search.js create mode 100755 docs/js/lunr.min.js create mode 100644 docs/js/typeahead.jquery.js create mode 100644 docs/search.json diff --git a/.jazzy.yaml b/.jazzy.yaml index 7521aca4..dd110ce9 100644 --- a/.jazzy.yaml +++ b/.jazzy.yaml @@ -4,9 +4,9 @@ exclude: Tests/ swift_version: 3.0.2 author: Timofey Solomko module: SWCompression -module_version: 2.1.0 +module_version: 2.2.0-test copyright: '© 2017 Timofey Solomko' readme: README.md github_url: https://github.com/tsolomko/SWCompression -github_file_prefix: https://github.com/tsolomko/SWCompression/tree/v2.1.0 +github_file_prefix: https://github.com/tsolomko/SWCompression/tree/v2.2.0-test theme: fullwidth diff --git a/CHANGELOG.md b/CHANGELOG.md index 25a70c8a..6f3dbd66 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,9 @@ # Changelog +v2.2.0-test +---------------- +- Deflate compression (limited). +- More ZIP public functions (API). + v2.1.0 ---------------- - ZIP containers support. diff --git a/SWCompression.podspec b/SWCompression.podspec index 8a605549..eb638e68 100644 --- a/SWCompression.podspec +++ b/SWCompression.podspec @@ -1,7 +1,7 @@ Pod::Spec.new do |s| s.name = "SWCompression" - s.version = "2.1.0" + s.version = "2.2.0-test" s.summary = "Framework with implementations in Swift of different (de)compression algorithms" s.description = <<-DESC @@ -34,7 +34,7 @@ Pod::Spec.new do |s| s.subspec 'Deflate' do |sp| sp.dependency 'SWCompression/Common' - sp.source_files = 'Sources/{Deflate.swift,HuffmanTree.swift}' + sp.source_files = 'Sources/{Deflate.swift,HuffmanTree.swift,BitToByteWriter.swift}' end s.subspec 'GZip' do |sp| diff --git a/Sources/Service/Info-iOS.plist b/Sources/Service/Info-iOS.plist index f69838d4..5d0ca0de 100644 --- a/Sources/Service/Info-iOS.plist +++ b/Sources/Service/Info-iOS.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 2.1.0 + 2.2.0-test CFBundleVersion $(CURRENT_PROJECT_VERSION) NSPrincipalClass diff --git a/Sources/Service/Info-tvOS.plist b/Sources/Service/Info-tvOS.plist index f69838d4..5d0ca0de 100644 --- a/Sources/Service/Info-tvOS.plist +++ b/Sources/Service/Info-tvOS.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 2.1.0 + 2.2.0-test CFBundleVersion $(CURRENT_PROJECT_VERSION) NSPrincipalClass diff --git a/Sources/Service/Info-watchOS.plist b/Sources/Service/Info-watchOS.plist index f69838d4..5d0ca0de 100644 --- a/Sources/Service/Info-watchOS.plist +++ b/Sources/Service/Info-watchOS.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 2.1.0 + 2.2.0-test CFBundleVersion $(CURRENT_PROJECT_VERSION) NSPrincipalClass diff --git a/Sources/Service/Info.plist b/Sources/Service/Info.plist index 64df5ef2..537c1690 100644 --- a/Sources/Service/Info.plist +++ b/Sources/Service/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 2.1.0 + 2.2.0-test CFBundleVersion $(CURRENT_PROJECT_VERSION) NSHumanReadableCopyright diff --git a/docs/Classes.html b/docs/Classes.html index 0bc99893..1eb8f2bc 100644 --- a/docs/Classes.html +++ b/docs/Classes.html @@ -8,6 +8,9 @@ + + + @@ -19,7 +22,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

+ +

+

+ +

@@ -121,6 +130,9 @@

+ @@ -174,7 +186,7 @@
- Show on GitHub + Show on GitHub
@@ -209,7 +221,7 @@
- Show on GitHub + Show on GitHub
@@ -244,7 +256,7 @@
- Show on GitHub + Show on GitHub
@@ -279,7 +291,7 @@
- Show on GitHub + Show on GitHub
@@ -314,7 +326,7 @@
- Show on GitHub + Show on GitHub
@@ -349,7 +361,7 @@
- Show on GitHub + Show on GitHub
@@ -384,7 +396,7 @@
- Show on GitHub + Show on GitHub
@@ -419,7 +431,7 @@
- Show on GitHub + Show on GitHub
@@ -433,7 +445,7 @@ diff --git a/docs/Classes/BZip2.html b/docs/Classes/BZip2.html index a99476d9..1cfdab13 100644 --- a/docs/Classes/BZip2.html +++ b/docs/Classes/BZip2.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

+ +

+

+ +

@@ -122,6 +131,9 @@

+ @@ -172,23 +184,11 @@

If data passed is not actually compressed with BZip2, BZip2Error will be thrown.

-
-

Parameter

-

Parameter compressedData: Data compressed with BZip2.

- -
-

Throws

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

-
- -
-

Returns

-

Decompressed data.

-
@@ -226,7 +226,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
- Show on GitHub + Show on GitHub
@@ -240,7 +240,7 @@ It may indicate that either the data is damaged or it might not be compressed wi diff --git a/docs/Classes/Deflate.html b/docs/Classes/Deflate.html index 6c863702..763fdee2 100644 --- a/docs/Classes/Deflate.html +++ b/docs/Classes/Deflate.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

+ +

+

+ +

@@ -122,6 +131,9 @@

+ @@ -172,23 +184,11 @@

If data passed is not actually compressed with DEFLATE, DeflateError will be thrown.

-
-

Parameter

-

Parameter compressedData: Data compressed with DEFLATE.

- -
-

Throws

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

-
- -
-

Returns

-

Decompressed data.

-
@@ -226,7 +226,37 @@ It may indicate that either the data is damaged or it might not be compressed wi
- Show on GitHub + Show on GitHub +
+ + + +
  • +
    + + + + compress(data:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public final class Deflate: DecompressionAlgorithm
    + +
    +
    +
    @@ -240,7 +270,7 @@ It may indicate that either the data is damaged or it might not be compressed wi diff --git a/docs/Classes/GzipArchive.html b/docs/Classes/GzipArchive.html index d962fa55..b9dc16cd 100644 --- a/docs/Classes/GzipArchive.html +++ b/docs/Classes/GzipArchive.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

  • + @@ -180,23 +192,11 @@ -
    -

    Parameter

    -

    Parameter archiveData: Data compressed with gzip.

    - -
    -

    Throws

    DeflateError or GzipError depending on the type of inconsistency in data. It may indicate that either the data is damaged or it might not be compressed with gzip or DEFLATE at all.

    -
    - -
    -

    Returns

    -

    Unarchived data.

    -
    @@ -234,7 +234,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    - Show on GitHub + Show on GitHub
    @@ -248,7 +248,7 @@ It may indicate that either the data is damaged or it might not be compressed wi diff --git a/docs/Classes/LZMA.html b/docs/Classes/LZMA.html index 7623d503..dbe1b5b0 100644 --- a/docs/Classes/LZMA.html +++ b/docs/Classes/LZMA.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -172,23 +184,11 @@

    If data passed is not actually compressed with LZMA, LZMAError will be thrown.

    -
    -

    Parameter

    -

    Parameter compressedData: Data compressed with LZMA.

    - -
    -

    Throws

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

    -
    - -
    -

    Returns

    -

    Decompressed data.

    -
    @@ -226,7 +226,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    - Show on GitHub + Show on GitHub
    @@ -240,7 +240,7 @@ It may indicate that either the data is damaged or it might not be compressed wi diff --git a/docs/Classes/LZMA2.html b/docs/Classes/LZMA2.html index 602fd158..101ebc34 100644 --- a/docs/Classes/LZMA2.html +++ b/docs/Classes/LZMA2.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -172,23 +184,11 @@

    If data passed is not actually compressed with LZMA2, LZMA2Error or LZMAError will be thrown.

    -
    -

    Parameter

    -

    Parameter compressedData: Data compressed with LZMA2.

    - -
    -

    Throws

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

    -
    - -
    -

    Returns

    -

    Decompressed data.

    -
    @@ -226,7 +226,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    - Show on GitHub + Show on GitHub
    @@ -240,7 +240,7 @@ It may indicate that either the data is damaged or it might not be compressed wi diff --git a/docs/Classes/XZArchive.html b/docs/Classes/XZArchive.html index a682cb4d..185c6ad3 100644 --- a/docs/Classes/XZArchive.html +++ b/docs/Classes/XZArchive.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -176,23 +188,11 @@ If filters other than LZMA2 are used in archive then LZMAError or LZMA2Error will be thrown.

    -
    -

    Parameter

    -

    Parameter archiveData: Data compressed with xz.

    - -
    -

    Throws

    LZMAError, LZMA2Error or XZError depending on the type of inconsistency in data. It may indicate that either the data is damaged or it might not be compressed with xz or LZMA(2) at all.

    -
    - -
    -

    Returns

    -

    Unarchived data.

    -
    @@ -230,7 +230,7 @@ It may indicate that either the data is damaged or it might not be compressed wi
    - Show on GitHub + Show on GitHub
    @@ -244,7 +244,7 @@ It may indicate that either the data is damaged or it might not be compressed wi diff --git a/docs/Classes/ZipContainer.html b/docs/Classes/ZipContainer.html index 1f2b185b..9e1bb6c2 100644 --- a/docs/Classes/ZipContainer.html +++ b/docs/Classes/ZipContainer.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -155,6 +167,96 @@
      +
    • +
      + + + + entries + +
      +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public class ZipContainer
      + +
      +
      + +
      +
      +
    • +
    • +
      + + + + init(containerData:) + +
      +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public class ZipContainer
      + +
      +
      + +
      +
      +
    • +
    • +
      + + + + data(for:) + +
      +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public class ZipContainer
      + +
      +
      + +
      +
      +
    • @@ -193,23 +295,11 @@ the last character of entry’s name (it should be ‘/’). If all
      -
      -

      Parameter

      -

      Parameter containerData: Data of ZIP container.

      - -
      -

      Throws

      ZipError or DeflateError depending on the type of inconsistency in data. It may indicate that either the container is damaged or it might not be ZIP container or compressed with Deflate at all.

      -
      - -
      -

      Returns

      -

      Array of pairs (tuples) where first member is entryName and second member is entryData.

      -
    @@ -247,7 +337,7 @@ It may indicate that either the container is damaged or it might not be ZIP cont
    @@ -261,7 +351,7 @@ It may indicate that either the container is damaged or it might not be ZIP cont diff --git a/docs/Classes/ZlibArchive.html b/docs/Classes/ZlibArchive.html index 025dd6f4..93d6c0d4 100644 --- a/docs/Classes/ZlibArchive.html +++ b/docs/Classes/ZlibArchive.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -180,23 +192,11 @@ -
    -

    Parameter

    -

    Parameter archiveData: Data compressed with zlib.

    - -
    -

    Throws

    DeflateError or ZlibError depending on the type of inconsistency in data. It may indicate that either the data is damaged or it might not be compressed with zlib or DEFLATE at all.

    -
    - -
    -

    Returns

    -

    Unarchived data.

    -
    @@ -234,7 +234,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -248,7 +248,7 @@ It may indicate that either the data is damaged or it might not be compressed wi diff --git a/docs/Enums.html b/docs/Enums.html index fe9c3bca..76efcc45 100644 --- a/docs/Enums.html +++ b/docs/Enums.html @@ -8,6 +8,9 @@ + + + @@ -19,7 +22,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -121,6 +130,9 @@

    + @@ -183,7 +195,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -230,7 +242,7 @@ Associated value contains already decompressed data. @@ -280,7 +292,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive ( @@ -329,7 +341,7 @@ than the repeat length. @@ -374,7 +386,7 @@ Associated value contains already decompressed data. @@ -417,7 +429,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -465,7 +477,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -516,7 +528,7 @@ Associated value contains already decompressed data. @@ -530,7 +542,7 @@ Associated value contains already decompressed data. diff --git a/docs/Enums/BZip2Error.html b/docs/Enums/BZip2Error.html index a88f9c63..099cdfd3 100644 --- a/docs/Enums/BZip2Error.html +++ b/docs/Enums/BZip2Error.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -193,7 +205,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -227,7 +239,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -261,7 +273,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -295,7 +307,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -329,7 +341,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -363,7 +375,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -397,7 +409,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -431,7 +443,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -465,7 +477,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -479,7 +491,7 @@ It may indicate that either the data is damaged or it might not be compressed wi diff --git a/docs/Enums/DeflateError.html b/docs/Enums/DeflateError.html index ea0483a8..b9075084 100644 --- a/docs/Enums/DeflateError.html +++ b/docs/Enums/DeflateError.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -188,7 +200,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -222,7 +234,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -256,7 +268,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -290,7 +302,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -304,7 +316,7 @@ It may indicate that either the data is damaged or it might not be compressed wi diff --git a/docs/Enums/GzipError.html b/docs/Enums/GzipError.html index 4fe4bfda..a0b1e514 100644 --- a/docs/Enums/GzipError.html +++ b/docs/Enums/GzipError.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -192,7 +204,7 @@ Associated value contains already decompressed data. @@ -226,7 +238,7 @@ Associated value contains already decompressed data. @@ -260,7 +272,7 @@ Associated value contains already decompressed data. @@ -294,7 +306,7 @@ Associated value contains already decompressed data. @@ -329,7 +341,7 @@ Associated value contains already decompressed data.

    @@ -363,7 +375,7 @@ Associated value contains already decompressed data.

    @@ -377,7 +389,7 @@ Associated value contains already decompressed data.

    diff --git a/docs/Enums/LZMA2Error.html b/docs/Enums/LZMA2Error.html index bd30c240..9d450f1c 100644 --- a/docs/Enums/LZMA2Error.html +++ b/docs/Enums/LZMA2Error.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -189,7 +201,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -223,7 +235,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -257,7 +269,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -291,7 +303,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -326,7 +338,7 @@ amount of compressed data read was different from the one stored in LZMA2 packet @@ -340,7 +352,7 @@ amount of compressed data read was different from the one stored in LZMA2 packet diff --git a/docs/Enums/LZMAError.html b/docs/Enums/LZMAError.html index 44158bbf..f50e7e33 100644 --- a/docs/Enums/LZMAError.html +++ b/docs/Enums/LZMAError.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -194,7 +206,7 @@ than the repeat length. @@ -228,7 +240,7 @@ than the repeat length. @@ -262,7 +274,7 @@ than the repeat length. @@ -296,7 +308,7 @@ than the repeat length. @@ -330,7 +342,7 @@ than the repeat length. @@ -364,7 +376,7 @@ than the repeat length. @@ -398,7 +410,7 @@ than the repeat length. @@ -412,7 +424,7 @@ than the repeat length. diff --git a/docs/Enums/XZError.html b/docs/Enums/XZError.html index 864608ca..bc14e588 100644 --- a/docs/Enums/XZError.html +++ b/docs/Enums/XZError.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -196,7 +208,7 @@ Associated value contains already decompressed data. @@ -230,7 +242,7 @@ Associated value contains already decompressed data. @@ -264,7 +276,7 @@ Associated value contains already decompressed data. @@ -298,7 +310,7 @@ Associated value contains already decompressed data. @@ -332,7 +344,7 @@ Associated value contains already decompressed data. @@ -366,7 +378,7 @@ Associated value contains already decompressed data. @@ -401,7 +413,7 @@ amount of compressed data read was different from the one stored in block header @@ -436,7 +448,7 @@ Associated value contains already decompressed data.

    @@ -470,7 +482,7 @@ Associated value contains already decompressed data.

    @@ -504,7 +516,7 @@ Associated value contains already decompressed data.

    @@ -518,7 +530,7 @@ Associated value contains already decompressed data.

    diff --git a/docs/Enums/ZipError.html b/docs/Enums/ZipError.html index 7bb1976a..0ea33993 100644 --- a/docs/Enums/ZipError.html +++ b/docs/Enums/ZipError.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -195,7 +207,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive ( @@ -229,7 +241,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive ( @@ -263,7 +275,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive ( @@ -297,7 +309,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive ( @@ -331,7 +343,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive ( @@ -365,7 +377,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive ( @@ -399,7 +411,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive ( @@ -433,7 +445,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive ( @@ -467,7 +479,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive ( @@ -501,7 +513,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive ( @@ -515,7 +527,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive ( diff --git a/docs/Enums/ZlibError.html b/docs/Enums/ZlibError.html index 707dd6c3..df3bfae5 100644 --- a/docs/Enums/ZlibError.html +++ b/docs/Enums/ZlibError.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -190,7 +202,7 @@ Associated value contains already decompressed data. @@ -224,7 +236,7 @@ Associated value contains already decompressed data. @@ -258,7 +270,7 @@ Associated value contains already decompressed data. @@ -292,7 +304,7 @@ Associated value contains already decompressed data. @@ -327,7 +339,7 @@ Associated value contains already decompressed data.

    @@ -341,7 +353,7 @@ Associated value contains already decompressed data.

    diff --git a/docs/Protocols.html b/docs/Protocols.html index c1fa9c82..d174c2ba 100644 --- a/docs/Protocols.html +++ b/docs/Protocols.html @@ -8,6 +8,9 @@ + + + @@ -19,7 +22,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -121,6 +130,9 @@

    + @@ -174,7 +186,7 @@ @@ -205,7 +217,7 @@ @@ -219,7 +231,7 @@ diff --git a/docs/Protocols/Archive.html b/docs/Protocols/Archive.html index 84a991bd..a50f2b7f 100644 --- a/docs/Protocols/Archive.html +++ b/docs/Protocols/Archive.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -180,7 +192,7 @@ @@ -194,7 +206,7 @@ diff --git a/docs/Protocols/DecompressionAlgorithm.html b/docs/Protocols/DecompressionAlgorithm.html index d325c541..c178a387 100644 --- a/docs/Protocols/DecompressionAlgorithm.html +++ b/docs/Protocols/DecompressionAlgorithm.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -180,7 +192,7 @@ @@ -194,7 +206,7 @@ diff --git a/docs/Structs.html b/docs/Structs.html index 4af3de12..947f4b95 100644 --- a/docs/Structs.html +++ b/docs/Structs.html @@ -8,6 +8,9 @@ + + + @@ -19,7 +22,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -121,6 +130,9 @@

    + @@ -174,7 +186,34 @@ + + + + + +
    +
    @@ -223,7 +262,7 @@ diff --git a/docs/Structs/GzipHeader.html b/docs/Structs/GzipHeader.html index b8746b3d..b8dbe7a6 100644 --- a/docs/Structs/GzipHeader.html +++ b/docs/Structs/GzipHeader.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -181,7 +193,7 @@ @@ -212,7 +224,7 @@ @@ -242,7 +254,7 @@ @@ -272,7 +284,7 @@ @@ -302,7 +314,7 @@ @@ -332,7 +344,7 @@ @@ -362,7 +374,7 @@ @@ -384,12 +396,6 @@

    If data passed is not actually a gzip archive, GzipError will be thrown.

    -
    -

    Parameter

    -

    Parameter archiveData: Data compressed with gzip.

    - -
    -

    Throws

    GzipError. It may indicate that either the data is damaged or @@ -427,7 +433,7 @@ it might not be compressed with gzip at all.

    @@ -441,7 +447,7 @@ it might not be compressed with gzip at all.

    diff --git a/docs/Structs/GzipHeader/CompressionMethod.html b/docs/Structs/GzipHeader/CompressionMethod.html index 203fa4c1..02bba75c 100644 --- a/docs/Structs/GzipHeader/CompressionMethod.html +++ b/docs/Structs/GzipHeader/CompressionMethod.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -180,7 +192,7 @@ @@ -194,7 +206,7 @@ diff --git a/docs/Structs/GzipHeader/FileSystemType.html b/docs/Structs/GzipHeader/FileSystemType.html index 59859573..b00b30c9 100644 --- a/docs/Structs/GzipHeader/FileSystemType.html +++ b/docs/Structs/GzipHeader/FileSystemType.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -180,7 +192,7 @@ @@ -214,7 +226,7 @@ @@ -248,7 +260,7 @@ @@ -282,7 +294,7 @@ @@ -316,7 +328,7 @@ @@ -330,7 +342,7 @@ diff --git a/docs/Structs/ZipEntry.html b/docs/Structs/ZipEntry.html new file mode 100644 index 00000000..e8539550 --- /dev/null +++ b/docs/Structs/ZipEntry.html @@ -0,0 +1,243 @@ + + + + ZipEntry Struct Reference + + + + + + + + + + + + + + + + +
    +

    + + SWCompression Docs + + (93% documented) +

    + +

    +

    + +
    +

    + +

    + + + View on GitHub + +

    + +
    + + + +
    + + +
    + + + + diff --git a/docs/Structs/ZlibHeader.html b/docs/Structs/ZlibHeader.html index ea7ac348..1306fbf0 100644 --- a/docs/Structs/ZlibHeader.html +++ b/docs/Structs/ZlibHeader.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -181,7 +193,7 @@ @@ -212,7 +224,7 @@ @@ -242,7 +254,7 @@ @@ -272,7 +284,7 @@ @@ -302,7 +314,7 @@ @@ -324,12 +336,6 @@

    If data passed is not actually a zlib archive, ZlibError will be thrown.

    -
    -

    Parameter

    -

    Parameter archiveData: Data compressed with zlib.

    - -
    -

    Throws

    ZlibError. It may indicate that either the data is damaged or @@ -367,7 +373,7 @@ it might not be compressed with zlib at all.

    @@ -381,7 +387,7 @@ it might not be compressed with zlib at all.

    diff --git a/docs/Structs/ZlibHeader/CompressionLevel.html b/docs/Structs/ZlibHeader/CompressionLevel.html index b0ed94fa..98fbc913 100644 --- a/docs/Structs/ZlibHeader/CompressionLevel.html +++ b/docs/Structs/ZlibHeader/CompressionLevel.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -180,7 +192,7 @@ @@ -214,7 +226,7 @@ @@ -248,7 +260,7 @@ @@ -282,7 +294,7 @@ @@ -296,7 +308,7 @@ diff --git a/docs/Structs/ZlibHeader/CompressionMethod.html b/docs/Structs/ZlibHeader/CompressionMethod.html index 21086040..7fa29476 100644 --- a/docs/Structs/ZlibHeader/CompressionMethod.html +++ b/docs/Structs/ZlibHeader/CompressionMethod.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -180,7 +192,7 @@ @@ -194,7 +206,7 @@ diff --git a/docs/badge.svg b/docs/badge.svg new file mode 100644 index 00000000..a720cf66 --- /dev/null +++ b/docs/badge.svg @@ -0,0 +1 @@ +documentationdocumentation93%93% \ No newline at end of file diff --git a/docs/css/jazzy.css b/docs/css/jazzy.css index 75b54333..c83db5bf 100644 --- a/docs/css/jazzy.css +++ b/docs/css/jazzy.css @@ -327,3 +327,42 @@ 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/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes.html index 0bc99893..1eb8f2bc 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes.html @@ -8,6 +8,9 @@ + + + @@ -19,7 +22,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -121,6 +130,9 @@

    + @@ -174,7 +186,7 @@ @@ -209,7 +221,7 @@ @@ -244,7 +256,7 @@ @@ -279,7 +291,7 @@ @@ -314,7 +326,7 @@ @@ -349,7 +361,7 @@ @@ -384,7 +396,7 @@ @@ -419,7 +431,7 @@ @@ -433,7 +445,7 @@ diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/BZip2.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/BZip2.html index a99476d9..1cfdab13 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/BZip2.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/BZip2.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -172,23 +184,11 @@

    If data passed is not actually compressed with BZip2, BZip2Error will be thrown.

    -
    -

    Parameter

    -

    Parameter compressedData: Data compressed with BZip2.

    - -
    -

    Throws

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

    -
    - -
    -

    Returns

    -

    Decompressed data.

    -
    @@ -226,7 +226,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -240,7 +240,7 @@ It may indicate that either the data is damaged or it might not be compressed wi diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/Deflate.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/Deflate.html index 6c863702..763fdee2 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/Deflate.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/Deflate.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -172,23 +184,11 @@

    If data passed is not actually compressed with DEFLATE, DeflateError will be thrown.

    -
    -

    Parameter

    -

    Parameter compressedData: Data compressed with DEFLATE.

    - -
    -

    Throws

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

    -
    - -
    -

    Returns

    -

    Decompressed data.

    -
    @@ -226,7 +226,37 @@ It may indicate that either the data is damaged or it might not be compressed wi + + + +
  • +
    + + + + compress(data:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public final class Deflate: DecompressionAlgorithm
    + +
    +
    +
    @@ -240,7 +270,7 @@ It may indicate that either the data is damaged or it might not be compressed wi diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/GzipArchive.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/GzipArchive.html index d962fa55..b9dc16cd 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/GzipArchive.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/GzipArchive.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

  • + @@ -180,23 +192,11 @@ -
    -

    Parameter

    -

    Parameter archiveData: Data compressed with gzip.

    - -
    -

    Throws

    DeflateError or GzipError depending on the type of inconsistency in data. It may indicate that either the data is damaged or it might not be compressed with gzip or DEFLATE at all.

    -
    - -
    -

    Returns

    -

    Unarchived data.

    -
    @@ -234,7 +234,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -248,7 +248,7 @@ It may indicate that either the data is damaged or it might not be compressed wi diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/LZMA.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/LZMA.html index 7623d503..dbe1b5b0 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/LZMA.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/LZMA.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -172,23 +184,11 @@

    If data passed is not actually compressed with LZMA, LZMAError will be thrown.

    -
    -

    Parameter

    -

    Parameter compressedData: Data compressed with LZMA.

    - -
    -

    Throws

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

    -
    - -
    -

    Returns

    -

    Decompressed data.

    -
    @@ -226,7 +226,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -240,7 +240,7 @@ It may indicate that either the data is damaged or it might not be compressed wi diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/LZMA2.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/LZMA2.html index 602fd158..101ebc34 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/LZMA2.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/LZMA2.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -172,23 +184,11 @@

    If data passed is not actually compressed with LZMA2, LZMA2Error or LZMAError will be thrown.

    -
    -

    Parameter

    -

    Parameter compressedData: Data compressed with LZMA2.

    - -
    -

    Throws

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

    -
    - -
    -

    Returns

    -

    Decompressed data.

    -
    @@ -226,7 +226,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -240,7 +240,7 @@ It may indicate that either the data is damaged or it might not be compressed wi diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/XZArchive.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/XZArchive.html index a682cb4d..185c6ad3 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/XZArchive.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/XZArchive.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -176,23 +188,11 @@ If filters other than LZMA2 are used in archive then LZMAError or LZMA2Error will be thrown.

    -
    -

    Parameter

    -

    Parameter archiveData: Data compressed with xz.

    - -
    -

    Throws

    LZMAError, LZMA2Error or XZError depending on the type of inconsistency in data. It may indicate that either the data is damaged or it might not be compressed with xz or LZMA(2) at all.

    -
    - -
    -

    Returns

    -

    Unarchived data.

    -
    @@ -230,7 +230,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -244,7 +244,7 @@ It may indicate that either the data is damaged or it might not be compressed wi diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/ZipContainer.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/ZipContainer.html index 1f2b185b..9e1bb6c2 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/ZipContainer.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/ZipContainer.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -155,6 +167,96 @@
      +
    • +
      + + + + entries + +
      +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public class ZipContainer
      + +
      +
      + +
      +
      +
    • +
    • +
      + + + + init(containerData:) + +
      +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public class ZipContainer
      + +
      +
      + +
      +
      +
    • +
    • +
      + + + + data(for:) + +
      +
      +
      +
      +
      +
      +

      Undocumented

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public class ZipContainer
      + +
      +
      + +
      +
      +
    • @@ -193,23 +295,11 @@ the last character of entry’s name (it should be ‘/’). If all
      -
      -

      Parameter

      -

      Parameter containerData: Data of ZIP container.

      - -
      -

      Throws

      ZipError or DeflateError depending on the type of inconsistency in data. It may indicate that either the container is damaged or it might not be ZIP container or compressed with Deflate at all.

      -
      - -
      -

      Returns

      -

      Array of pairs (tuples) where first member is entryName and second member is entryData.

      -
    @@ -247,7 +337,7 @@ It may indicate that either the container is damaged or it might not be ZIP cont
    @@ -261,7 +351,7 @@ It may indicate that either the container is damaged or it might not be ZIP cont diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/ZlibArchive.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/ZlibArchive.html index 025dd6f4..93d6c0d4 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/ZlibArchive.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Classes/ZlibArchive.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -180,23 +192,11 @@ -
    -

    Parameter

    -

    Parameter archiveData: Data compressed with zlib.

    - -
    -

    Throws

    DeflateError or ZlibError depending on the type of inconsistency in data. It may indicate that either the data is damaged or it might not be compressed with zlib or DEFLATE at all.

    -
    - -
    -

    Returns

    -

    Unarchived data.

    -
    @@ -234,7 +234,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -248,7 +248,7 @@ It may indicate that either the data is damaged or it might not be compressed wi diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums.html index fe9c3bca..76efcc45 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums.html @@ -8,6 +8,9 @@ + + + @@ -19,7 +22,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -121,6 +130,9 @@

    + @@ -183,7 +195,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -230,7 +242,7 @@ Associated value contains already decompressed data. @@ -280,7 +292,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive ( @@ -329,7 +341,7 @@ than the repeat length. @@ -374,7 +386,7 @@ Associated value contains already decompressed data. @@ -417,7 +429,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -465,7 +477,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -516,7 +528,7 @@ Associated value contains already decompressed data. @@ -530,7 +542,7 @@ Associated value contains already decompressed data. diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/BZip2Error.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/BZip2Error.html index a88f9c63..099cdfd3 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/BZip2Error.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/BZip2Error.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -193,7 +205,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -227,7 +239,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -261,7 +273,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -295,7 +307,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -329,7 +341,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -363,7 +375,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -397,7 +409,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -431,7 +443,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -465,7 +477,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -479,7 +491,7 @@ It may indicate that either the data is damaged or it might not be compressed wi diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/DeflateError.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/DeflateError.html index ea0483a8..b9075084 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/DeflateError.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/DeflateError.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -188,7 +200,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -222,7 +234,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -256,7 +268,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -290,7 +302,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -304,7 +316,7 @@ It may indicate that either the data is damaged or it might not be compressed wi diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/GzipError.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/GzipError.html index 4fe4bfda..a0b1e514 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/GzipError.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/GzipError.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -192,7 +204,7 @@ Associated value contains already decompressed data. @@ -226,7 +238,7 @@ Associated value contains already decompressed data. @@ -260,7 +272,7 @@ Associated value contains already decompressed data. @@ -294,7 +306,7 @@ Associated value contains already decompressed data. @@ -329,7 +341,7 @@ Associated value contains already decompressed data.

    @@ -363,7 +375,7 @@ Associated value contains already decompressed data.

    @@ -377,7 +389,7 @@ Associated value contains already decompressed data.

    diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/LZMA2Error.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/LZMA2Error.html index bd30c240..9d450f1c 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/LZMA2Error.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/LZMA2Error.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -189,7 +201,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -223,7 +235,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -257,7 +269,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -291,7 +303,7 @@ It may indicate that either the data is damaged or it might not be compressed wi @@ -326,7 +338,7 @@ amount of compressed data read was different from the one stored in LZMA2 packet @@ -340,7 +352,7 @@ amount of compressed data read was different from the one stored in LZMA2 packet diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/LZMAError.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/LZMAError.html index 44158bbf..f50e7e33 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/LZMAError.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/LZMAError.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -194,7 +206,7 @@ than the repeat length. @@ -228,7 +240,7 @@ than the repeat length. @@ -262,7 +274,7 @@ than the repeat length. @@ -296,7 +308,7 @@ than the repeat length. @@ -330,7 +342,7 @@ than the repeat length. @@ -364,7 +376,7 @@ than the repeat length. @@ -398,7 +410,7 @@ than the repeat length. @@ -412,7 +424,7 @@ than the repeat length. diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/XZError.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/XZError.html index 864608ca..bc14e588 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/XZError.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/XZError.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -196,7 +208,7 @@ Associated value contains already decompressed data. @@ -230,7 +242,7 @@ Associated value contains already decompressed data. @@ -264,7 +276,7 @@ Associated value contains already decompressed data. @@ -298,7 +310,7 @@ Associated value contains already decompressed data. @@ -332,7 +344,7 @@ Associated value contains already decompressed data. @@ -366,7 +378,7 @@ Associated value contains already decompressed data. @@ -401,7 +413,7 @@ amount of compressed data read was different from the one stored in block header @@ -436,7 +448,7 @@ Associated value contains already decompressed data.

    @@ -470,7 +482,7 @@ Associated value contains already decompressed data.

    @@ -504,7 +516,7 @@ Associated value contains already decompressed data.

    @@ -518,7 +530,7 @@ Associated value contains already decompressed data.

    diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/ZipError.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/ZipError.html index 7bb1976a..0ea33993 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/ZipError.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/ZipError.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -195,7 +207,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive ( @@ -229,7 +241,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive ( @@ -263,7 +275,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive ( @@ -297,7 +309,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive ( @@ -331,7 +343,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive ( @@ -365,7 +377,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive ( @@ -399,7 +411,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive ( @@ -433,7 +445,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive ( @@ -467,7 +479,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive ( @@ -501,7 +513,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive ( @@ -515,7 +527,7 @@ It may indicate that either the data is damaged or it might not be ZIP archive ( diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/ZlibError.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/ZlibError.html index 707dd6c3..df3bfae5 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/ZlibError.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Enums/ZlibError.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -190,7 +202,7 @@ Associated value contains already decompressed data. @@ -224,7 +236,7 @@ Associated value contains already decompressed data. @@ -258,7 +270,7 @@ Associated value contains already decompressed data. @@ -292,7 +304,7 @@ Associated value contains already decompressed data. @@ -327,7 +339,7 @@ Associated value contains already decompressed data.

    @@ -341,7 +353,7 @@ Associated value contains already decompressed data.

    diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols.html index c1fa9c82..d174c2ba 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols.html @@ -8,6 +8,9 @@ + + + @@ -19,7 +22,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -121,6 +130,9 @@

    + @@ -174,7 +186,7 @@ @@ -205,7 +217,7 @@ @@ -219,7 +231,7 @@ diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/Archive.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/Archive.html index 84a991bd..a50f2b7f 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/Archive.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/Archive.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -180,7 +192,7 @@ @@ -194,7 +206,7 @@ diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/DecompressionAlgorithm.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/DecompressionAlgorithm.html index d325c541..c178a387 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/DecompressionAlgorithm.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Protocols/DecompressionAlgorithm.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -180,7 +192,7 @@ @@ -194,7 +206,7 @@ diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs.html index 4af3de12..947f4b95 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs.html @@ -8,6 +8,9 @@ + + + @@ -19,7 +22,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -121,6 +130,9 @@

    + @@ -174,7 +186,34 @@ + + + + + +
    +
    @@ -223,7 +262,7 @@ diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/GzipHeader.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/GzipHeader.html index b8746b3d..b8dbe7a6 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/GzipHeader.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/GzipHeader.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -181,7 +193,7 @@ @@ -212,7 +224,7 @@ @@ -242,7 +254,7 @@ @@ -272,7 +284,7 @@ @@ -302,7 +314,7 @@ @@ -332,7 +344,7 @@ @@ -362,7 +374,7 @@ @@ -384,12 +396,6 @@

    If data passed is not actually a gzip archive, GzipError will be thrown.

    -
    -

    Parameter

    -

    Parameter archiveData: Data compressed with gzip.

    - -
    -

    Throws

    GzipError. It may indicate that either the data is damaged or @@ -427,7 +433,7 @@ it might not be compressed with gzip at all.

    @@ -441,7 +447,7 @@ it might not be compressed with gzip at all.

    diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/GzipHeader/CompressionMethod.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/GzipHeader/CompressionMethod.html index 203fa4c1..02bba75c 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/GzipHeader/CompressionMethod.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/GzipHeader/CompressionMethod.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -180,7 +192,7 @@ @@ -194,7 +206,7 @@ diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/GzipHeader/FileSystemType.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/GzipHeader/FileSystemType.html index 59859573..b00b30c9 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/GzipHeader/FileSystemType.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/GzipHeader/FileSystemType.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -180,7 +192,7 @@ @@ -214,7 +226,7 @@ @@ -248,7 +260,7 @@ @@ -282,7 +294,7 @@ @@ -316,7 +328,7 @@ @@ -330,7 +342,7 @@ diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZipEntry.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZipEntry.html new file mode 100644 index 00000000..e8539550 --- /dev/null +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZipEntry.html @@ -0,0 +1,243 @@ + + + + ZipEntry Struct Reference + + + + + + + + + + + + + + + + +
    +

    + + SWCompression Docs + + (93% documented) +

    + +

    +

    + +
    +

    + +

    + + + View on GitHub + +

    + +
    + + + +
    + + +
    + + + + diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZlibHeader.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZlibHeader.html index ea7ac348..1306fbf0 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZlibHeader.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZlibHeader.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -181,7 +193,7 @@ @@ -212,7 +224,7 @@ @@ -242,7 +254,7 @@ @@ -272,7 +284,7 @@ @@ -302,7 +314,7 @@ @@ -324,12 +336,6 @@

    If data passed is not actually a zlib archive, ZlibError will be thrown.

    -
    -

    Parameter

    -

    Parameter archiveData: Data compressed with zlib.

    - -
    -

    Throws

    ZlibError. It may indicate that either the data is damaged or @@ -367,7 +373,7 @@ it might not be compressed with zlib at all.

    @@ -381,7 +387,7 @@ it might not be compressed with zlib at all.

    diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZlibHeader/CompressionLevel.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZlibHeader/CompressionLevel.html index b0ed94fa..98fbc913 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZlibHeader/CompressionLevel.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZlibHeader/CompressionLevel.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -180,7 +192,7 @@ @@ -214,7 +226,7 @@ @@ -248,7 +260,7 @@ @@ -282,7 +294,7 @@ @@ -296,7 +308,7 @@ diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZlibHeader/CompressionMethod.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZlibHeader/CompressionMethod.html index 21086040..7fa29476 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZlibHeader/CompressionMethod.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/Structs/ZlibHeader/CompressionMethod.html @@ -8,6 +8,9 @@ + + + @@ -20,7 +23,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -122,6 +131,9 @@

    + @@ -180,7 +192,7 @@ @@ -194,7 +206,7 @@ diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/css/jazzy.css b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/css/jazzy.css index 75b54333..c83db5bf 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/css/jazzy.css +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/css/jazzy.css @@ -327,3 +327,42 @@ 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/docs/docsets/SWCompression.docset/Contents/Resources/Documents/img/spinner.gif b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/img/spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..e3038d0a42c55b1a07caecb7c7a6cbac982ec09d GIT binary patch literal 1849 zcmb8wZBSF$83*voz31lM+?V7Kkqwb`LI|3K#DupH#kDs91c6du6?SMB!bsTr6|ge_{#vAVj^!DyNA-l zJ&$jDFNv;BTZXX@Qk-7+S5ErF>mkOcZ@lQv>F1VyCEMe2Ud@f<|L%#&QJi${E`2lR zqKFaW2Y$aTRxUY&ae$IHsN;Z;rdZ%CjYLTv!tMi234j-ON=CnvK-1QU|MG$YErn{gHZ@0Q6&?xSyply?S$EVNXH;gp?S5kV2-)$ga^gw`(f4Mm_Y(`RbgRkQTHF2@zL}dCiLk$RoZIc{xZL z_J*d5)Kb;#oKCFyfL*NGSs?y;e(QKvPJe1#G)h5*6E(?L9$nt?UaQJfP^$GDL0PU; z?r}C|);JQ4HES3w5VMlY7x6xfJAzDKlHE~>x;D`Fa=WygYot{pfFehH69o9pK|72W zwC6?t^AnATIJa=kewn=ep?Nk(aZ*pZo}51`S=^)jPRb`~l^VE}08>P3OJtQlXx1K8 z8Q}_u=F*fS;=k=?(fIv#+%811NTx8^}rHwvH%LbYmpFl9p1A{Idh@2x$ zuVp7)VD9}Uc(*(C**!QOdS(6B)$5^Tq5p3q*7un&_Z-NKEiEYg$D{Uq&sa>wj|za5 zJ6M~p)z+E6*X${8j6Ci+sqZ}zxeCAo0gZmZuhl+)Q%1U$Br_`NXcA-3yBdYMha+{o z{?q0Q(kaR2n`M29{!pwpgX6+CPQEgIO%x*0#!TC=c-ZPSkLO>OcmQUao5%-3w)U`F zRz?uGCEKQDh!TQPDmyd;iDX$TkMIe)%61q51Y2b-ie4r00!csilXgKL$txqj|6D(# z@(#!nQ}3R1JGeB3B5Tuqdvyg@*!-bq`9`pmasNGvy9^*+cd1Y*g>HK#rl7i79QQAG zl4SL_wW@WY1d+F?j0gFInGhsRrqvV3SKl{oqW+;9!fu|u@J)h4WM!0Cu02l@p60b#5M9c{dKh=_eRw~yl zWT0gw8RePzf%i8X&twiB|LF0bI@CYE{x1PI;Ylr4RJzU#Zc0j!c07g&q7=_eSd(sH z9VKChd?}^52IKcMqolAWiQH;HSp1Ploa$t zQhg|2sK;%Eb!By`)j9G1w?>`Wt6IK3gB}~uoue(MlRiIoZ#d{pgJZ8b{^{HO8)@%= zX)og3`*D5v1g;*Lz8@Sm(Q|&}PUytlb@Q_dzKFOzKK!Z_&?GO4+JO-)iPH=fs{(`& zZ9{oNn~LUZaeN!>i9p*0N^sHye8nw4xSi!REaP@@^Jy66|)Y9_AFoLlrlkg(42 zVq2J??I(+1*BcSKsTyO7LCho{8tVQm1b>*GQ*H~Mn71Lhy`alw%;D@CU^0)5Ng{cHz@LS7QZ o8uGHYt7)tmZjae5ge5$b`e_;HIklOseoIbqeod19BU-8d00{dbSpWb4 literal 0 HcmV?d00001 diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/index.html b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/index.html index 23e1202d..51987387 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/index.html +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/index.html @@ -8,6 +8,9 @@ + + + @@ -19,7 +22,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -121,6 +130,9 @@

    + @@ -330,7 +342,7 @@ so some difference in speed is expected.

    diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/js/jazzy.js b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/js/jazzy.js index e2b491dc..009c80d3 100755 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/js/jazzy.js +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/js/jazzy.js @@ -35,3 +35,9 @@ $(".token").click(function(event) { } event.preventDefault(); }); + +// Dumb down quotes within code blocks that delimit strings instead of quotations +// https://github.com/realm/jazzy/issues/714 +$("code q").replaceWith(function () { + return ["\"", $(this).contents(), "\""]; +}); diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/js/jazzy.search.js b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/js/jazzy.search.js new file mode 100644 index 00000000..54be83cf --- /dev/null +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/js/jazzy.search.js @@ -0,0 +1,62 @@ +$(function(){ + var searchIndex = lunr(function() { + this.ref('url'); + this.field('name'); + }); + + 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) { + $.each(searchData, function (url, doc) { + searchIndex.add({url: url, name: doc.name}); + }); + + $typeahead.typeahead( + { + highlight: true, + minLength: 3 + }, + { + limit: 10, + display: displayTemplate, + templates: { suggestion: suggestionTemplate }, + source: function(query, sync) { + var results = searchIndex.search(query).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/docs/docsets/SWCompression.docset/Contents/Resources/Documents/js/lunr.min.js b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/js/lunr.min.js new file mode 100755 index 00000000..22776bb8 --- /dev/null +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/js/lunr.min.js @@ -0,0 +1,6 @@ +/** + * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 0.7.2 + * Copyright (C) 2016 Oliver Nightingale + * @license MIT + */ +!function(){var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.7.2",t.utils={},t.utils.warn=function(t){return function(e){t.console&&console.warn&&console.warn(e)}}(this),t.utils.asString=function(t){return void 0===t||null===t?"":t.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var t=Array.prototype.slice.call(arguments),e=t.pop(),n=t;if("function"!=typeof e)throw new TypeError("last argument must be a function");n.forEach(function(t){this.hasHandler(t)||(this.events[t]=[]),this.events[t].push(e)},this)},t.EventEmitter.prototype.removeListener=function(t,e){if(this.hasHandler(t)){var n=this.events[t].indexOf(e);this.events[t].splice(n,1),this.events[t].length||delete this.events[t]}},t.EventEmitter.prototype.emit=function(t){if(this.hasHandler(t)){var e=Array.prototype.slice.call(arguments,1);this.events[t].forEach(function(t){t.apply(void 0,e)})}},t.EventEmitter.prototype.hasHandler=function(t){return t in this.events},t.tokenizer=function(e){if(!arguments.length||null==e||void 0==e)return[];if(Array.isArray(e))return e.map(function(e){return t.utils.asString(e).toLowerCase()});var n=t.tokenizer.seperator||t.tokenizer.separator;return e.toString().trim().toLowerCase().split(n)},t.tokenizer.seperator=!1,t.tokenizer.separator=/[\s\-]+/,t.tokenizer.load=function(t){var e=this.registeredFunctions[t];if(!e)throw new Error("Cannot load un-registered function: "+t);return e},t.tokenizer.label="default",t.tokenizer.registeredFunctions={"default":t.tokenizer},t.tokenizer.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing tokenizer: "+n),e.label=n,this.registeredFunctions[n]=e},t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.registeredFunctions[e];if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e);if(-1==i)throw new Error("Cannot find existingFn");i+=1,this._stack.splice(i,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e);if(-1==i)throw new Error("Cannot find existingFn");this._stack.splice(i,0,n)},t.Pipeline.prototype.remove=function(t){var e=this._stack.indexOf(t);-1!=e&&this._stack.splice(e,1)},t.Pipeline.prototype.run=function(t){for(var e=[],n=t.length,i=this._stack.length,r=0;n>r;r++){for(var o=t[r],s=0;i>s&&(o=this._stack[s](o,r,t),void 0!==o&&""!==o);s++);void 0!==o&&""!==o&&e.push(o)}return e},t.Pipeline.prototype.reset=function(){this._stack=[]},t.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Vector=function(){this._magnitude=null,this.list=void 0,this.length=0},t.Vector.Node=function(t,e,n){this.idx=t,this.val=e,this.next=n},t.Vector.prototype.insert=function(e,n){this._magnitude=void 0;var i=this.list;if(!i)return this.list=new t.Vector.Node(e,n,i),this.length++;if(en.idx?n=n.next:(i+=e.val*n.val,e=e.next,n=n.next);return i},t.Vector.prototype.similarity=function(t){return this.dot(t)/(this.magnitude()*t.magnitude())},t.SortedSet=function(){this.length=0,this.elements=[]},t.SortedSet.load=function(t){var e=new this;return e.elements=t,e.length=t.length,e},t.SortedSet.prototype.add=function(){var t,e;for(t=0;t1;){if(o===t)return r;t>o&&(e=r),o>t&&(n=r),i=n-e,r=e+Math.floor(i/2),o=this.elements[r]}return o===t?r:-1},t.SortedSet.prototype.locationFor=function(t){for(var e=0,n=this.elements.length,i=n-e,r=e+Math.floor(i/2),o=this.elements[r];i>1;)t>o&&(e=r),o>t&&(n=r),i=n-e,r=e+Math.floor(i/2),o=this.elements[r];return o>t?r:t>o?r+1:void 0},t.SortedSet.prototype.intersect=function(e){for(var n=new t.SortedSet,i=0,r=0,o=this.length,s=e.length,a=this.elements,h=e.elements;;){if(i>o-1||r>s-1)break;a[i]!==h[r]?a[i]h[r]&&r++:(n.add(a[i]),i++,r++)}return n},t.SortedSet.prototype.clone=function(){var e=new t.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},t.SortedSet.prototype.union=function(t){var e,n,i;this.length>=t.length?(e=this,n=t):(e=t,n=this),i=e.clone();for(var r=0,o=n.toArray();rp;p++)c[p]===a&&d++;h+=d/f*l.boost}}this.tokenStore.add(a,{ref:o,tf:h})}n&&this.eventEmitter.emit("add",e,this)},t.Index.prototype.remove=function(t,e){var n=t[this._ref],e=void 0===e?!0:e;if(this.documentStore.has(n)){var i=this.documentStore.get(n);this.documentStore.remove(n),i.forEach(function(t){this.tokenStore.remove(t,n)},this),e&&this.eventEmitter.emit("remove",t,this)}},t.Index.prototype.update=function(t,e){var e=void 0===e?!0:e;this.remove(t,!1),this.add(t,!1),e&&this.eventEmitter.emit("update",t,this)},t.Index.prototype.idf=function(t){var e="@"+t;if(Object.prototype.hasOwnProperty.call(this._idfCache,e))return this._idfCache[e];var n=this.tokenStore.count(t),i=1;return n>0&&(i=1+Math.log(this.documentStore.length/n)),this._idfCache[e]=i},t.Index.prototype.search=function(e){var n=this.pipeline.run(this.tokenizerFn(e)),i=new t.Vector,r=[],o=this._fields.reduce(function(t,e){return t+e.boost},0),s=n.some(function(t){return this.tokenStore.has(t)},this);if(!s)return[];n.forEach(function(e,n,s){var a=1/s.length*this._fields.length*o,h=this,u=this.tokenStore.expand(e).reduce(function(n,r){var o=h.corpusTokens.indexOf(r),s=h.idf(r),u=1,l=new t.SortedSet;if(r!==e){var c=Math.max(3,r.length-e.length);u=1/Math.log(c)}o>-1&&i.insert(o,a*s*u);for(var f=h.tokenStore.get(r),d=Object.keys(f),p=d.length,v=0;p>v;v++)l.add(f[d[v]].ref);return n.union(l)},new t.SortedSet);r.push(u)},this);var a=r.reduce(function(t,e){return t.intersect(e)});return a.map(function(t){return{ref:t,score:i.similarity(this.documentVector(t))}},this).sort(function(t,e){return e.score-t.score})},t.Index.prototype.documentVector=function(e){for(var n=this.documentStore.get(e),i=n.length,r=new t.Vector,o=0;i>o;o++){var s=n.elements[o],a=this.tokenStore.get(s)[e].tf,h=this.idf(s);r.insert(this.corpusTokens.indexOf(s),a*h)}return r},t.Index.prototype.toJSON=function(){return{version:t.version,fields:this._fields,ref:this._ref,tokenizer:this.tokenizerFn.label,documentStore:this.documentStore.toJSON(),tokenStore:this.tokenStore.toJSON(),corpusTokens:this.corpusTokens.toJSON(),pipeline:this.pipeline.toJSON()}},t.Index.prototype.use=function(t){var e=Array.prototype.slice.call(arguments,1);e.unshift(this),t.apply(this,e)},t.Store=function(){this.store={},this.length=0},t.Store.load=function(e){var n=new this;return n.length=e.length,n.store=Object.keys(e.store).reduce(function(n,i){return n[i]=t.SortedSet.load(e.store[i]),n},{}),n},t.Store.prototype.set=function(t,e){this.has(t)||this.length++,this.store[t]=e},t.Store.prototype.get=function(t){return this.store[t]},t.Store.prototype.has=function(t){return t in this.store},t.Store.prototype.remove=function(t){this.has(t)&&(delete this.store[t],this.length--)},t.Store.prototype.toJSON=function(){return{store:this.store,length:this.length}},t.stemmer=function(){var t={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},e={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",i="[aeiouy]",r=n+"[^aeiouy]*",o=i+"[aeiou]*",s="^("+r+")?"+o+r,a="^("+r+")?"+o+r+"("+o+")?$",h="^("+r+")?"+o+r+o+r,u="^("+r+")?"+i,l=new RegExp(s),c=new RegExp(h),f=new RegExp(a),d=new RegExp(u),p=/^(.+?)(ss|i)es$/,v=/^(.+?)([^s])s$/,g=/^(.+?)eed$/,m=/^(.+?)(ed|ing)$/,y=/.$/,S=/(at|bl|iz)$/,w=new RegExp("([^aeiouylsz])\\1$"),k=new RegExp("^"+r+i+"[^aeiouwxy]$"),x=/^(.+?[^aeiou])y$/,b=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,E=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,F=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,_=/^(.+?)(s|t)(ion)$/,z=/^(.+?)e$/,O=/ll$/,P=new RegExp("^"+r+i+"[^aeiouwxy]$"),T=function(n){var i,r,o,s,a,h,u;if(n.length<3)return n;if(o=n.substr(0,1),"y"==o&&(n=o.toUpperCase()+n.substr(1)),s=p,a=v,s.test(n)?n=n.replace(s,"$1$2"):a.test(n)&&(n=n.replace(a,"$1$2")),s=g,a=m,s.test(n)){var T=s.exec(n);s=l,s.test(T[1])&&(s=y,n=n.replace(s,""))}else if(a.test(n)){var T=a.exec(n);i=T[1],a=d,a.test(i)&&(n=i,a=S,h=w,u=k,a.test(n)?n+="e":h.test(n)?(s=y,n=n.replace(s,"")):u.test(n)&&(n+="e"))}if(s=x,s.test(n)){var T=s.exec(n);i=T[1],n=i+"i"}if(s=b,s.test(n)){var T=s.exec(n);i=T[1],r=T[2],s=l,s.test(i)&&(n=i+t[r])}if(s=E,s.test(n)){var T=s.exec(n);i=T[1],r=T[2],s=l,s.test(i)&&(n=i+e[r])}if(s=F,a=_,s.test(n)){var T=s.exec(n);i=T[1],s=c,s.test(i)&&(n=i)}else if(a.test(n)){var T=a.exec(n);i=T[1]+T[2],a=c,a.test(i)&&(n=i)}if(s=z,s.test(n)){var T=s.exec(n);i=T[1],s=c,a=f,h=P,(s.test(i)||a.test(i)&&!h.test(i))&&(n=i)}return s=O,a=c,s.test(n)&&a.test(n)&&(s=y,n=n.replace(s,"")),"y"==o&&(n=o.toLowerCase()+n.substr(1)),n};return T}(),t.Pipeline.registerFunction(t.stemmer,"stemmer"),t.generateStopWordFilter=function(t){var e=t.reduce(function(t,e){return t[e]=e,t},{});return function(t){return t&&e[t]!==t?t:void 0}},t.stopWordFilter=t.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter"),t.trimmer=function(t){return t.replace(/^\W+/,"").replace(/\W+$/,"")},t.Pipeline.registerFunction(t.trimmer,"trimmer"),t.TokenStore=function(){this.root={docs:{}},this.length=0},t.TokenStore.load=function(t){var e=new this;return e.root=t.root,e.length=t.length,e},t.TokenStore.prototype.add=function(t,e,n){var n=n||this.root,i=t.charAt(0),r=t.slice(1);return i in n||(n[i]={docs:{}}),0===r.length?(n[i].docs[e.ref]=e,void(this.length+=1)):this.add(r,e,n[i])},t.TokenStore.prototype.has=function(t){if(!t)return!1;for(var e=this.root,n=0;n', + 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; + $e = $.Event(namespace + type); + (args = args || []).unshift($e); + this.$el.trigger.apply(this.$el, 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 + }; + 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); + 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 getRegex(patterns, caseSensitive, wordsOnly) { + var escapedPatterns = [], regexStr; + for (var i = 0, len = patterns.length; i < len; i++) { + escapedPatterns.push(_.escapeRegExChars(patterns[i])); + } + 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) { + o = o || {}; + if (!o.input) { + $.error("input is missing"); + } + www.mixin(this); + this.$hint = $(o.hint); + this.$input = $(o.input); + 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; + } + } + 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); + } + }, + 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 = $("
    "); + } + }); + 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 = { + 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 = 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).addClass(this.classes.dataset).addClass(this.classes.dataset + "-" + this.name); + } + Dataset.extractData = function extractData(el) { + var $el = $(el); + if ($el.data(keys.obj)) { + return { + 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", this.name, suggestions, false); + }, + _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", this.name, suggestions, true); + }, + _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.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); + }; + 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); + } + } + function async(suggestions) { + suggestions = suggestions || []; + if (!canceled && rendered < that.limit) { + that.cancel = $.noop; + rendered += suggestions.length; + that._append(query, suggestions.slice(0, that.limit - rendered)); + that.async && that.trigger("asyncReceived", query); + } + } + }, + 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 || suggestionTemplate + }; + function suggestionTemplate(context) { + return $("
    ").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, isDatasetEmpty); + function isDatasetEmpty(dataset) { + return dataset.isEmpty(); + } + }, + _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); + _.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.addClass(this.classes.open); + }, + close: function close() { + 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 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.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, dataset, suggestions, async) { + this._updateHint(); + 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()) { + this.select($selectable) && $e.preventDefault(); + } + }, + _onTabKeyed: function onTabKeyed(type, $e) { + var $selectable; + if ($selectable = this.menu.getActiveSelectable()) { + this.select($selectable) && $e.preventDefault(); + } else 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.getTopSelectable()); + } + }, + _onRightKeyed: function onRightKeyed() { + if (this.dir === "ltr" && this.input.isCursorAtEnd()) { + this.autocomplete(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.menu.open(); + this._updateHint(); + this.eventBus.trigger("open"); + } + return this.isOpen(); + }, + close: function close() { + if (this.isOpen() && !this.eventBus.before("close")) { + 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)) { + this.input.setQuery(data.val, true); + this.eventBus.trigger("select", data.obj); + 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)) { + this.input.setQuery(data.val); + this.eventBus.trigger("autocomplete", data.obj); + return true; + } + return false; + }, + moveCursor: function moveCursor(delta) { + var query, $candidate, data, payload, cancelMove; + query = this.input.getQuery(); + $candidate = this.menu.selectableRelativeToCursor(delta); + data = this.menu.getSelectableData($candidate); + payload = data ? data.obj : null; + cancelMove = this._minLengthMet() && this.menu.update(query); + if (!cancelMove && !this.eventBus.before("cursorchange", payload)) { + this.menu.setCursor($candidate); + if (data) { + this.input.setInputValue(data.val); + } else { + this.input.resetInputValue(); + this._updateHint(); + } + this.eventBus.trigger("cursorchange", payload); + 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, 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 + }, www); + menu = new MenuConstructor({ + node: $menu, + datasets: datasets + }, www); + typeahead = new Typeahead({ + input: input, + menu: menu, + eventBus: eventBus, + minLength: o.minLength + }, 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(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).removeAttr("id name placeholder required").attr({ + autocomplete: "off", + 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({ + autocomplete: "off", + 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/docs/docsets/SWCompression.docset/Contents/Resources/Documents/search.json b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/search.json new file mode 100644 index 00000000..6c9f1b12 --- /dev/null +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/search.json @@ -0,0 +1 @@ +{"Structs/ZlibHeader/CompressionLevel.html#/s:FOV13SWCompression10ZlibHeader16CompressionLevel16fastestAlgorithmFMS1_S1_":{"name":"fastestAlgorithm","abstract":"

    Fastest algorithm.

    ","parent_name":"CompressionLevel"},"Structs/ZlibHeader/CompressionLevel.html#/s:FOV13SWCompression10ZlibHeader16CompressionLevel13fastAlgorithmFMS1_S1_":{"name":"fastAlgorithm","abstract":"

    Fast algorithm.

    ","parent_name":"CompressionLevel"},"Structs/ZlibHeader/CompressionLevel.html#/s:FOV13SWCompression10ZlibHeader16CompressionLevel16defaultAlgorithmFMS1_S1_":{"name":"defaultAlgorithm","abstract":"

    Default algorithm.

    ","parent_name":"CompressionLevel"},"Structs/ZlibHeader/CompressionLevel.html#/s:FOV13SWCompression10ZlibHeader16CompressionLevel13slowAlgorithmFMS1_S1_":{"name":"slowAlgorithm","abstract":"

    Slowest algorithm but with maximum compression.

    ","parent_name":"CompressionLevel"},"Structs/ZlibHeader/CompressionMethod.html#/s:FOV13SWCompression10ZlibHeader17CompressionMethod7deflateFMS1_S1_":{"name":"deflate","abstract":"

    The only one supported compression method (Deflate).

    ","parent_name":"CompressionMethod"},"Structs/ZlibHeader/CompressionMethod.html":{"name":"CompressionMethod","abstract":"

    Supported compression methods in zlib archive.

    ","parent_name":"ZlibHeader"},"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:vV13SWCompression10ZlibHeader17compressionMethodOS0_17CompressionMethod":{"name":"compressionMethod","abstract":"

    Compression method of archive. Always equals to .deflate.

    ","parent_name":"ZlibHeader"},"Structs/ZlibHeader.html#/s:vV13SWCompression10ZlibHeader16compressionLevelOS0_16CompressionLevel":{"name":"compressionLevel","abstract":"

    Level of compression in the archive.

    ","parent_name":"ZlibHeader"},"Structs/ZlibHeader.html#/s:vV13SWCompression10ZlibHeader10windowSizeSi":{"name":"windowSize","abstract":"

    Size of ‘window’: moving interval of data which was used to make the archive

    ","parent_name":"ZlibHeader"},"Structs/ZlibHeader.html#/s:FV13SWCompression10ZlibHeadercFzT11archiveDataV10Foundation4Data_S0_":{"name":"init(archiveData:)","abstract":"

    Initializes the structure with the values from zlib archive presented in archiveData.

    ","parent_name":"ZlibHeader"},"Structs/ZipEntry.html#/s:vV13SWCompression8ZipEntry8fileNameGSqSS_":{"name":"fileName","abstract":"Undocumented","parent_name":"ZipEntry"},"Structs/ZipEntry.html#/s:vV13SWCompression8ZipEntry11fileCommentGSqSS_":{"name":"fileComment","abstract":"Undocumented","parent_name":"ZipEntry"},"Structs/ZipEntry.html#/s:vV13SWCompression8ZipEntry14fileAttributesVs6UInt32":{"name":"fileAttributes","abstract":"Undocumented","parent_name":"ZipEntry"},"Structs/GzipHeader/FileSystemType.html#/s:FOV13SWCompression10GzipHeader14FileSystemType4unixFMS1_S1_":{"name":"unix","abstract":"

    One of many Linux systems. (It seems like modern macOS systems also fall into this category).

    ","parent_name":"FileSystemType"},"Structs/GzipHeader/FileSystemType.html#/s:FOV13SWCompression10GzipHeader14FileSystemType9macintoshFMS1_S1_":{"name":"macintosh","abstract":"

    Older Macintosh (Mac OS, OS X) systems.

    ","parent_name":"FileSystemType"},"Structs/GzipHeader/FileSystemType.html#/s:FOV13SWCompression10GzipHeader14FileSystemType4ntfsFMS1_S1_":{"name":"ntfs","abstract":"

    File system used in Microsoft™®© Windows™®©.

    ","parent_name":"FileSystemType"},"Structs/GzipHeader/FileSystemType.html#/s:FOV13SWCompression10GzipHeader14FileSystemType7unknownFMS1_S1_":{"name":"unknown","abstract":"

    File system was unknown to the archiver.

    ","parent_name":"FileSystemType"},"Structs/GzipHeader/FileSystemType.html#/s:FOV13SWCompression10GzipHeader14FileSystemType5otherFMS1_S1_":{"name":"other","abstract":"

    File system was one of the rare systems..

    ","parent_name":"FileSystemType"},"Structs/GzipHeader/CompressionMethod.html#/s:FOV13SWCompression10GzipHeader17CompressionMethod7deflateFMS1_S1_":{"name":"deflate","abstract":"

    The only one supported compression method (Deflate).

    ","parent_name":"CompressionMethod"},"Structs/GzipHeader/CompressionMethod.html":{"name":"CompressionMethod","abstract":"

    Supported compression methods in gzip archive.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader/FileSystemType.html":{"name":"FileSystemType","abstract":"

    Type of file system on which gzip archive was created.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:vV13SWCompression10GzipHeader17compressionMethodOS0_17CompressionMethod":{"name":"compressionMethod","abstract":"

    Compression method of archive. Always equals to .deflate.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:vV13SWCompression10GzipHeader16modificationTimeV10Foundation4Date":{"name":"modificationTime","abstract":"

    The most recent modification time of the original file.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:vV13SWCompression10GzipHeader6osTypeOS0_14FileSystemType":{"name":"osType","abstract":"

    Type of file system on which compression took place.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:vV13SWCompression10GzipHeader16originalFileNameGSqSS_":{"name":"originalFileName","abstract":"

    Name of the original file.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:vV13SWCompression10GzipHeader7commentGSqSS_":{"name":"comment","abstract":"

    Comment inside the archive.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:FV13SWCompression10GzipHeadercFzT11archiveDataV10Foundation4Data_S0_":{"name":"init(archiveData:)","abstract":"

    Initializes the structure with the values of first ‘member’ in gzip archive presented in archiveData.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html":{"name":"GzipHeader","abstract":"

    A structure which provides information about gzip archive.

    "},"Structs/ZipEntry.html":{"name":"ZipEntry","abstract":"Undocumented"},"Structs/ZlibHeader.html":{"name":"ZlibHeader","abstract":"

    A structure which provides information about zlib archive.

    "},"Protocols/DecompressionAlgorithm.html#/s:ZFP13SWCompression22DecompressionAlgorithm10decompressFzT14compressedDataV10Foundation4Data_S2_":{"name":"decompress(compressedData:)","abstract":"

    Abstract decompress function.

    ","parent_name":"DecompressionAlgorithm"},"Protocols/Archive.html#/s:ZFP13SWCompression7Archive9unarchiveFzT11archiveDataV10Foundation4Data_S2_":{"name":"unarchive(archiveData:)","abstract":"

    Abstract unarchive function.

    ","parent_name":"Archive"},"Protocols/Archive.html":{"name":"Archive","abstract":"

    Abstract archive class which supports unarchiving.

    "},"Protocols/DecompressionAlgorithm.html":{"name":"DecompressionAlgorithm","abstract":"

    Abstract decompression algorithm class which supports decompression.

    "},"Enums/XZError.html#/s:FO13SWCompression7XZError10WrongMagicFMS0_S0_":{"name":"WrongMagic","abstract":"

    Either magic number in header or footer was not equal to predefined value.

    ","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError16WrongArchiveInfoFMS0_S0_":{"name":"WrongArchiveInfo","abstract":"

    One of special fields of archive had an incorrect value.

    ","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError18FieldReservedValueFMS0_S0_":{"name":"FieldReservedValue","abstract":"

    One of special fields of archive had a reserved value.

    ","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError12WrongInfoCRCFMS0_S0_":{"name":"WrongInfoCRC","abstract":"

    Checksum of one of special fields of archive was incorrect.

    ","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError13WrongFilterIDFMS0_S0_":{"name":"WrongFilterID","abstract":"

    ID of filter(s) used in archvie was unsupported.

    ","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError15CheckTypeSHA256FMS0_S0_":{"name":"CheckTypeSHA256","abstract":"

    Type of checksum of archive was SHA-256.

    ","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError13WrongDataSizeFMS0_S0_":{"name":"WrongDataSize","abstract":"

    Either size of decompressed data was not equal to specified one in block header or","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError10WrongCheckFMS0_FV10Foundation4DataS0_":{"name":"WrongCheck","abstract":"

    Computed checksum of uncompressed data didn’t match the value stored in the archive.","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError12WrongPaddingFMS0_S0_":{"name":"WrongPadding","abstract":"

    Unsupported padding of a structure in the archive.

    ","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError21MultiByteIntegerErrorFMS0_S0_":{"name":"MultiByteIntegerError","abstract":"

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

    ","parent_name":"XZError"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error10WrongMagicFMS0_S0_":{"name":"WrongMagic","abstract":"

    Magic number was not 0x425a.

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error22WrongCompressionMethodFMS0_S0_":{"name":"WrongCompressionMethod","abstract":"

    Compression method was not type ‘h’ (not Huffman).

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error14WrongBlockSizeFMS0_S0_":{"name":"WrongBlockSize","abstract":"

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

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error14WrongBlockTypeFMS0_S0_":{"name":"WrongBlockType","abstract":"

    Unknown block type (was neither ‘pi’ nor ‘sqrt(pi)’).

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error15RandomizedBlockFMS0_S0_":{"name":"RandomizedBlock","abstract":"

    Block is randomized.

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error18WrongHuffmanGroupsFMS0_S0_":{"name":"WrongHuffmanGroups","abstract":"

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

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error13WrongSelectorFMS0_S0_":{"name":"WrongSelector","abstract":"

    Selector was greater than total number of Huffman tables/groups.

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error22WrongHuffmanLengthCodeFMS0_S0_":{"name":"WrongHuffmanLengthCode","abstract":"

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

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error14SymbolNotFoundFMS0_S0_":{"name":"SymbolNotFound","abstract":"

    Symbol was not found in Huffman tree.

    ","parent_name":"BZip2Error"},"Enums/DeflateError.html#/s:FO13SWCompression12DeflateError29WrongUncompressedBlockLengthsFMS0_S0_":{"name":"WrongUncompressedBlockLengths","abstract":"

    Uncompressed block’ length and nlength bytes were not compatible.

    ","parent_name":"DeflateError"},"Enums/DeflateError.html#/s:FO13SWCompression12DeflateError14WrongBlockTypeFMS0_S0_":{"name":"WrongBlockType","abstract":"

    Unknown block type (not from 0 to 2).

    ","parent_name":"DeflateError"},"Enums/DeflateError.html#/s:FO13SWCompression12DeflateError11WrongSymbolFMS0_S0_":{"name":"WrongSymbol","abstract":"

    Decoded symbol was found in Huffman tree but is unknown.

    ","parent_name":"DeflateError"},"Enums/DeflateError.html#/s:FO13SWCompression12DeflateError14SymbolNotFoundFMS0_S0_":{"name":"SymbolNotFound","abstract":"

    Symbol was not found in Huffman tree.

    ","parent_name":"DeflateError"},"Enums/ZlibError.html#/s:FO13SWCompression9ZlibError22WrongCompressionMethodFMS0_S0_":{"name":"WrongCompressionMethod","abstract":"

    Compression method was other than 8 which is the only supported one.

    ","parent_name":"ZlibError"},"Enums/ZlibError.html#/s:FO13SWCompression9ZlibError20WrongCompressionInfoFMS0_S0_":{"name":"WrongCompressionInfo","abstract":"

    Compression info was greater than 7 which is uncompatible number 8 compression method.

    ","parent_name":"ZlibError"},"Enums/ZlibError.html#/s:FO13SWCompression9ZlibError11WrongFcheckFMS0_S0_":{"name":"WrongFcheck","abstract":"

    First two bytes were inconsistent with each other.

    ","parent_name":"ZlibError"},"Enums/ZlibError.html#/s:FO13SWCompression9ZlibError21WrongCompressionLevelFMS0_S0_":{"name":"WrongCompressionLevel","abstract":"

    Compression level was other than 0, 1, 2, 3.

    ","parent_name":"ZlibError"},"Enums/ZlibError.html#/s:FO13SWCompression9ZlibError12WrongAdler32FMS0_FV10Foundation4DataS0_":{"name":"WrongAdler32","abstract":"

    Computed Adler-32 sum of uncompressed data didn’t match the value stored in the archive.","parent_name":"ZlibError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError15WrongPropertiesFMS0_S0_":{"name":"WrongProperties","abstract":"

    Properties byte was greater than 225.

    ","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError21RangeDecoderInitErrorFMS0_S0_":{"name":"RangeDecoderInitError","abstract":"

    Unable to initialize RanderDecorer.

    ","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError24ExceededUncompressedSizeFMS0_S0_":{"name":"ExceededUncompressedSize","abstract":"

    The number of uncompressed bytes hit limit in the middle of decoding.

    ","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError13WindowIsEmptyFMS0_S0_":{"name":"WindowIsEmpty","abstract":"

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

    ","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError23RangeDecoderFinishErrorFMS0_S0_":{"name":"RangeDecoderFinishError","abstract":"

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

    ","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError16RepeatWillExceedFMS0_S0_":{"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:FO13SWCompression9LZMAError17NotEnoughToRepeatFMS0_S0_":{"name":"NotEnoughToRepeat","abstract":"

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

    ","parent_name":"LZMAError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError27NotFoundCentralDirectoryEndFMS0_S0_":{"name":"NotFoundCentralDirectoryEnd","abstract":"

    End of Central Directoty record was not found.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError14WrongSignatureFMS0_S0_":{"name":"WrongSignature","abstract":"

    Wrong signature of one of ZIP container’s structures.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError9WrongSizeFMS0_S0_":{"name":"WrongSize","abstract":"

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

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError12WrongVersionFMS0_S0_":{"name":"WrongVersion","abstract":"

    Wrong number of version needed to extract ZIP container.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError24MultiVolumesNotSupportedFMS0_S0_":{"name":"MultiVolumesNotSupported","abstract":"

    Archive either spanned or consists of several volumes. This feature is not supported.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError22EncryptionNotSupportedFMS0_S0_":{"name":"EncryptionNotSupported","abstract":"

    Entry or record is encrypted. This feature is not supported.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError20PatchingNotSupportedFMS0_S0_":{"name":"PatchingNotSupported","abstract":"

    Entry contains patched data. This feature is not supported.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError23CompressionNotSupportedFMS0_S0_":{"name":"CompressionNotSupported","abstract":"

    Wrong compression method of an entry.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError16WrongLocalHeaderFMS0_S0_":{"name":"WrongLocalHeader","abstract":"

    Wrong local header of an entry.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError10WrongCRC32FMS0_S0_":{"name":"WrongCRC32","abstract":"

    Wrong computed CRC32 of an entry.

    ","parent_name":"ZipError"},"Enums/GzipError.html#/s:FO13SWCompression9GzipError10WrongMagicFMS0_S0_":{"name":"WrongMagic","abstract":"

    First two bytes of archive were not 31 and 139.

    ","parent_name":"GzipError"},"Enums/GzipError.html#/s:FO13SWCompression9GzipError22WrongCompressionMethodFMS0_S0_":{"name":"WrongCompressionMethod","abstract":"

    Compression method was other than 8 which is the only supported one.

    ","parent_name":"GzipError"},"Enums/GzipError.html#/s:FO13SWCompression9GzipError10WrongFlagsFMS0_S0_":{"name":"WrongFlags","abstract":"

    Reserved flags bits were not equal to 0.

    ","parent_name":"GzipError"},"Enums/GzipError.html#/s:FO13SWCompression9GzipError14WrongHeaderCRCFMS0_S0_":{"name":"WrongHeaderCRC","abstract":"

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

    ","parent_name":"GzipError"},"Enums/GzipError.html#/s:FO13SWCompression9GzipError8WrongCRCFMS0_FV10Foundation4DataS0_":{"name":"WrongCRC","abstract":"

    Computed CRC of uncompressed data didn’t match the value stored in the archive.","parent_name":"GzipError"},"Enums/GzipError.html#/s:FO13SWCompression9GzipError10WrongISizeFMS0_S0_":{"name":"WrongISize","abstract":"

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

    ","parent_name":"GzipError"},"Enums/LZMA2Error.html#/s:FO13SWCompression10LZMA2Error15WrongPropertiesFMS0_S0_":{"name":"WrongProperties","abstract":"

    Reserved bits of LZMA2 properties byte were not equal to zero.

    ","parent_name":"LZMA2Error"},"Enums/LZMA2Error.html#/s:FO13SWCompression10LZMA2Error19WrongDictionarySizeFMS0_S0_":{"name":"WrongDictionarySize","abstract":"

    Dictionary size was too big.

    ","parent_name":"LZMA2Error"},"Enums/LZMA2Error.html#/s:FO13SWCompression10LZMA2Error16WrongControlByteFMS0_S0_":{"name":"WrongControlByte","abstract":"

    Unknown conrol byte value of LZMA2 packet.

    ","parent_name":"LZMA2Error"},"Enums/LZMA2Error.html#/s:FO13SWCompression10LZMA2Error10WrongResetFMS0_S0_":{"name":"WrongReset","abstract":"

    Unknown reset instruction encounetered in LZMA2 packet.

    ","parent_name":"LZMA2Error"},"Enums/LZMA2Error.html#/s:FO13SWCompression10LZMA2Error10WrongSizesFMS0_S0_":{"name":"WrongSizes","abstract":"

    Either size of decompressed data was not equal to specified one in LZMA2 packet or","parent_name":"LZMA2Error"},"Enums/LZMA2Error.html":{"name":"LZMA2Error","abstract":"

    Error happened during LZMA2 decompression."},"Enums/GzipError.html":{"name":"GzipError","abstract":"

    Error happened during unarchiving gzip archive."},"Enums/ZipError.html":{"name":"ZipError","abstract":"

    Error happened during processing ZIP archive (container)."},"Enums/LZMAError.html":{"name":"LZMAError","abstract":"

    Error happened during LZMA decompression."},"Enums/ZlibError.html":{"name":"ZlibError","abstract":"

    Error happened during unarchiving Zlib archive."},"Enums/DeflateError.html":{"name":"DeflateError","abstract":"

    Error happened during deflate decompression."},"Enums/BZip2Error.html":{"name":"BZip2Error","abstract":"

    Error happened during bzip2 decompression."},"Enums/XZError.html":{"name":"XZError","abstract":"

    Error happened during unarchiving XZ archive."},"Classes/XZArchive.html#/s:ZFC13SWCompression9XZArchive9unarchiveFzT11archiveDataV10Foundation4Data_S2_":{"name":"unarchive(archiveData:)","abstract":"

    Unarchives xz archive stored in archiveData.

    ","parent_name":"XZArchive"},"Classes/BZip2.html#/s:ZFC13SWCompression5BZip210decompressFzT14compressedDataV10Foundation4Data_S2_":{"name":"decompress(compressedData:)","abstract":"

    Decompresses compressedData with BZip2 algortihm.

    ","parent_name":"BZip2"},"Classes/Deflate.html#/s:ZFC13SWCompression7Deflate10decompressFzT14compressedDataV10Foundation4Data_S2_":{"name":"decompress(compressedData:)","abstract":"

    Decompresses compressedData with DEFLATE algortihm.

    ","parent_name":"Deflate"},"Classes/Deflate.html#/s:ZFC13SWCompression7Deflate8compressFzT4dataV10Foundation4Data_S2_":{"name":"compress(data:)","abstract":"Undocumented","parent_name":"Deflate"},"Classes/ZlibArchive.html#/s:ZFC13SWCompression11ZlibArchive9unarchiveFzT11archiveDataV10Foundation4Data_S2_":{"name":"unarchive(archiveData:)","abstract":"

    Unarchives Zlib archive stored in archiveData.

    ","parent_name":"ZlibArchive"},"Classes/LZMA.html#/s:ZFC13SWCompression4LZMA10decompressFzT14compressedDataV10Foundation4Data_S2_":{"name":"decompress(compressedData:)","abstract":"

    Decompresses compressedData with LZMA algortihm.

    ","parent_name":"LZMA"},"Classes/ZipContainer.html#/s:vC13SWCompression12ZipContainer7entriesGSaVS_8ZipEntry_":{"name":"entries","abstract":"Undocumented","parent_name":"ZipContainer"},"Classes/ZipContainer.html#/s:FC13SWCompression12ZipContainercFzT13containerDataV10Foundation4Data_S0_":{"name":"init(containerData:)","abstract":"Undocumented","parent_name":"ZipContainer"},"Classes/ZipContainer.html#/s:FC13SWCompression12ZipContainer4dataFzT3forVS_8ZipEntry_V10Foundation4Data":{"name":"data(for:)","abstract":"Undocumented","parent_name":"ZipContainer"},"Classes/ZipContainer.html#/s:ZFC13SWCompression12ZipContainer4openFzT13containerDataV10Foundation4Data_GSaT9entryNameSS9entryDataS2___":{"name":"open(containerData:)","abstract":"

    Processes ZIP archive (container) and returns an array of tuples (String, Data).","parent_name":"ZipContainer"},"Classes/GzipArchive.html#/s:ZFC13SWCompression11GzipArchive9unarchiveFzT11archiveDataV10Foundation4Data_S2_":{"name":"unarchive(archiveData:)","abstract":"

    Unarchives gzip archive stored in archiveData.

    ","parent_name":"GzipArchive"},"Classes/LZMA2.html#/s:ZFC13SWCompression5LZMA210decompressFzT14compressedDataV10Foundation4Data_S2_":{"name":"decompress(compressedData:)","abstract":"

    Decompresses compressedData with LZMA2 algortihm. LZMA2 is a modification of LZMA.

    ","parent_name":"LZMA2"},"Classes/LZMA2.html":{"name":"LZMA2","abstract":"

    Provides function to decompress data, which were compressed with LZMA2

    "},"Classes/GzipArchive.html":{"name":"GzipArchive","abstract":"

    Provides unarchive function for GZip archives.

    "},"Classes/ZipContainer.html":{"name":"ZipContainer","abstract":"

    Provides function to open ZIP archives (containers).

    "},"Classes/LZMA.html":{"name":"LZMA","abstract":"

    Provides function to decompress data, which were compressed with LZMA

    "},"Classes/ZlibArchive.html":{"name":"ZlibArchive","abstract":"

    Provides unarchive function for Zlib archives.

    "},"Classes/Deflate.html":{"name":"Deflate","abstract":"

    Provides function to decompress data, which were compressed with DEFLATE.

    "},"Classes/BZip2.html":{"name":"BZip2","abstract":"

    Provides function to decompress data, which were compressed using BZip2.

    "},"Classes/XZArchive.html":{"name":"XZArchive","abstract":"

    Provides unarchive function for XZ archives.

    "},"Classes.html":{"name":"Classes","abstract":"The following classes are available globally."},"Enums.html":{"name":"Enums","abstract":"The following enums are available globally."},"Protocols.html":{"name":"Protocols","abstract":"The following protocols are available globally."},"Structs.html":{"name":"Structs","abstract":"The following structs are available globally."}} \ No newline at end of file diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/undocumented.json b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/undocumented.json index 1862018e..704c4204 100644 --- a/docs/docsets/SWCompression.docset/Contents/Resources/Documents/undocumented.json +++ b/docs/docsets/SWCompression.docset/Contents/Resources/Documents/undocumented.json @@ -1,6 +1,61 @@ { "warnings": [ - + { + "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/Deflate.swift", + "line": 228, + "symbol": "Deflate.compress(data:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/ZipContainer.swift", + "line": 50, + "symbol": "ZipEntry", + "symbol_kind": "source.lang.swift.decl.struct", + "warning": "undocumented" + }, + { + "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/ZipContainer.swift", + "line": 54, + "symbol": "ZipEntry.fileName", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/ZipContainer.swift", + "line": 58, + "symbol": "ZipEntry.fileComment", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/ZipContainer.swift", + "line": 62, + "symbol": "ZipEntry.fileAttributes", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/ZipContainer.swift", + "line": 77, + "symbol": "ZipContainer.entries", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/ZipContainer.swift", + "line": 79, + "symbol": "ZipContainer.init(containerData:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/ZipContainer.swift", + "line": 110, + "symbol": "ZipContainer.data(for:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + } ], "source_directory": "/Users/timofeysolomko/Developer/SWCompression" } \ No newline at end of file diff --git a/docs/docsets/SWCompression.docset/Contents/Resources/docSet.dsidx b/docs/docsets/SWCompression.docset/Contents/Resources/docSet.dsidx index 8536ab2ca0ac1694f3e83152768a257129305220..f288827803260a43a24ebc716086400ba669514c 100644 GIT binary patch delta 4731 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 IA#Kq4PXMrnD*ylh diff --git a/docs/docsets/SWCompression.tgz b/docs/docsets/SWCompression.tgz index f6823754b5c18fed6804990de1ffd03ff957cac1..34d37626c74a2a3b59de6edb3191cf97f8a57d99 100644 GIT binary patch literal 98153 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

    {)hQ8{z^`Y3hsdt_4UE_}1;bHC%GTZ*w` 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 literal 70598 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

  • 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
    MY?us>vw3K^ujrleb2 zWH~Rg00jorEWPl6Zx6ZN`Lz=#d-n9u4GvSvG_s6%hM(W0NI6EL?$uE157Q5wRzkNx ziwcG$YDYq8Cr6nXs_ucWXEi5?ge(S!x(m~)tXass+wT|1{?#xkuQ?Lef%BZ6-sCSIg427O&afOv}?hDC(C{yX=?i3;7w=^>Li=MNAYA6 zi7aaoDgdS;oG{k@ROeZv`Ja0n^Fz)-w1zq?UR@8aImnDgoKBFH0o`P}glK#AJeYuR zii9#1-L*Rs7+J`S0;2RwbGSU$ z=QR7zi4Lp*?p@ zClNWENMUZtYJC0>J8-OM8fvOw4?r8|W(myYl*0<`s}2C5e4 z>kPPp*2H?B=IXON$f@^v-t`r4)Ut-*IW`pc&59nf^v~Y2^iA#b@abwvqG?sW)|my$ z<4?O4D-uYKF@XJo0EpWj2%v?k(=h;mw{qI)FFZ@aBW>ExkQm1r#yLmW=c2&YK!XxJ zizlDvDg8%>X*c>v@-m+Azmg^(egES96HX4mSCYE`m*;fWdBc#`!><^0=u@QE4)Zzg z_rXoG8Dp2lJnz5T&>7v;s9~%Ya?SrVw*wF>?j{qSLj#F#aMRz;hy>sKxXIR>#9-^= zQECsNj^j&^y|{DfVmw_U`hO*j#PI*HED~q$s{CfYJIhxOXWRL&$QPlf4z~tp%hj*P zo*lVumU)gj`IpmD{4SHR?u4w{=#LnZEd8KU%UaRQP~os&4+eVePw+U9MxLuLL+6Zt zcB9_wUKDqSo%KUJ%FcfMw{h=1?V#~huKt{>zu@&Q&Cz~?`P%0U3cAO10Z5IhLO>3N z-LLXC53#zP(gVy(l`wNh7b00b4M1{n%Xj#s2%V;0?D3 zcfcV56baIa(WuTCGR7ax&R^=oi4`Y7ANRKsG({hz5#=~keuxYRa+!u5;CoO9^Rs9| zbNrelEXJuGMwitxN-*5B{(AmUarkU6!j{u7lzz>vBTYK`vXiAswUP|JzYoVRvjlb~1hD zz;#t09RN18Bzv-0WxE8!Jy?;TJKsGf{XYU3RR2n&3;N9o;`JTGM{KuW;JvidDeMnr zjsswP!?A|w?qa@9Bafa(4RFu)R~VWUSkx^2@WKk~VZpfVU3!t8zvh!9l^ikd1{h+# z^UdnlPZ~FWF~UY6DEcYH3irSG&`Zr)|I2>a>3=?ad%Gm&>D z2gN(%dvmHED_=?Z3bMLX{S6;Hj3|Bdt(m+v3%oGr!2+KDADIj5_wXw6#a33ud(?in zjZry6Loferp#SI&fkA1qEg#};eGDSl_c;ADryp#b-He$XUH%)6)Nb=J$tHZX3s?>^ z08G+|K7{4|d~sl(g?k;5kA*stxcn17L@W z1v@w~KuN1Z-G+z;%2?vjCr2FQ^iXLY8tdH8R8rBRU;k#+VoV!gA)dX`;vNB@k+FRtKl z{4L$ohu+op1^kiaVSKK>V^$p<-}6KfSASNFs%#wh;R^lz5#GQ5A~r1lU+YDXCm>FB zNnPk~dHQ6jLgdK8+xd2$&lfnYqZuDbkuozI@h*rC>NUMgY|XCPyhbNz`mwaZk^Lx? zH2RS961~aOQ6z^SefB&0kB&$Bce#zm?vVJwIq>OpXvXVM=Ry&!o>J_T~1>-&Alo)?+Ixe!yAS;M2m`&E7n7x{^XAZ2` z)3G^uV6Xp z-Ys1~TZ|;ERf_jim(E-NyPe7dxUJPv4GXOnDm|SLG=HLQy*NH3x%ZVu2cnj{EhCT* z^)N+=)a5j5p5y6{c?fawy*8)h&Q)soO}1mXt9zkJB0FbD4R#U7y>2N`yF``aBzJZG zl>32XW@Sv$f*~e{k&r{A?UJ)2iiaO25z}~)PcAvb^u^#qMl?%b#+sCBufp!MXESaT zy*CV)dx79~RSvthQd9QKW#`c3HwxY{b$6QObwjy0(r}}J`ZZb-UMt#ab~ihXRzF*_ z8ThFi(VuIxgp#R0VwtZaNwV-1nWRQ8^_X&6M~-a@a+ug65ljjb7S}FbAt|`#c$xTA z>7S)h6WSFQue_(s4H+`;3%QlGnN))k%z4*qk73M_*RW!nuB)I*y%Qhs#x_@E)ia9? zs*1Ly1q)HkvaRp7x!r2mEhB7&!m6dPMr!50M!K+7?CRW?(PfkX7U7_%-f!=hIi2-S z1sxH~TgDFLYy|Vg;ye8<{9IHIf7-0xnd{fA^^~*)_FSM}Nap&b{k3ux2uHyebXwkS zaY^f8^^UK8{R-%Pd<7L8AfTve-!sJ6lgOG;;^fC+WUgrBc-Z9!06!iVZPA7jHuyo! z7xX`BzcVA~dTx;QWQKFANa2%*S0OiaG#hiszxO-+0k)}GENK4!xznNx*qjx&#OZZ^7f{Wv2 z{GuX~*z;Da*;P=T5!Zjqt0R&e8XZ>WYdU2fbr|l8Uz4RI<52Wcrn60f928y-qYGA+ zT5x73kOS$Wi*BXV|5>#G!h-5_F(%vEn1DnVj2ph=Fyayi7DIvY`zDp^H7we^sE#2@ zwa&JUkofI+)~n+8%yu}p$Ovkt^a9pRw;Cj0sHR(Rc&3AKv&G<)1Ixq017>$J#^?=6Pk zX=>WcIYmoR0GzzDU?}W8mHS(+n%an;%~%}b#9mu$fNe`V1TL&RJ>@gSOenJv^n9qv zajE_bM-AY>;^ZRM2s4`6nZ?1wW7T0T^jbINTRlEtqC%bMu%;r_@P~S(>7OxMYlr=d z%NO2!i+Ip~?~;y^D9M@RM^R&h?0I2UZ&_2za!kKlFL^wSSlsDaHDB-Y;^GBDNAUq7 z8LTgqrqMFAS5Y)5bk=Uw&0nRLT73rHaim?u5x3#IuD=nxGxS9@=S$85-Uw2XFBvvE z=bQqa(v4ErG$#GVIYtMcqsg2AdA3*S)PQyteX0NJoY;UC-I;2g-P|qcCo5@5((^MT zaQ!(~qs;JilG)8=lyvrWEuPaT8?l@&wWzLHvZiU=?$fM?ohtskZV42g>n|J1pAI1V zjcnV)!o%TA0Ob0ij(w`A<~O5qjOr)!cfY59&tCH13r}1=s6Tn0P~BR~K)=%;^SJIk zTPN7ZoyBS<4|D`9Ip3fq>!=Q^7ti3t?A0d@Ny0!dgz&) z6gym)L-YWzw}zwCE5=Hj5j)kSaDUhCrR-WnGJ2clSC>Jg{c1X0v?X06QniAMl%EDx zCxXR?yV{)?A28ST5dR&BLUaYw^S_AGxZgA#;G}bF zS@yP-4ip&&0036`U+wknzvD3Y?el}$+}{TCuQl?&^)b1#qTZ+eVD!uT4dc+k!=8t2 zNg%` zY-OO4YVM^k>hh2Odsaf8!1^RfetWwlvSUMi}I!thxf73B#Q%yQzsWxpG#>=m6Sy~nipeL73ov- zB1%Tb&|6Gg2`G2hCbAZSNe63T^m5w%Kl)%?Bbb>Zm~>Rv9*LT+!*Wg!3Q$v_EdN5U zpBN5(mn4+G?Kj?Q=~WD@9`~U0hQANse$PPf!sZu_5%4k z>ET~En2kLj!Aao`d|JwH=1ahQ`UmuT1_FqcHx9Y^#tvlW?s9`%xK>EA+W#P500ywd8yNt z|HF44bnoof@r(vUOGEdF7G@y)%wHF!d&hQo>&i5=^CW~ z%wn{6L^HrPG8V{yG&@<)5kFenYvnF~@~(d#OF&^wAD|Yg%}{+k^akIzu4UA;Op1MSmEx{#J^ztLC>zB=U9kNV|#?rgI&%vBUa@Yb~}WYiFzp1UL>F zGF{_TWp*g6k*(<`3cYdLe0guXTH!h24W<9&(tq-^|K#QP5PKjG9GMP`k8(_>h!E3C zf-OzTTRdW_8Oia2QG^PB=-=HCeW{>t<$b{K$u$ib5{7L&OzsUFrlHcF-`-b)JAlTn z05QHfJ>9U3=me%xXUDrvT_jFD{oN{#y*ciBi=@65BvqW5r)!BRf7%SqM9?^FICI>l zFL&akZJR4(M1l6r6iYjIvAP?=gWSkLxBU_x;yxxCo*J=8HJ=M3*ht%FNsCDje6ost zfpP`S-ocy6RXk0JsNM}RmdOQ)K(|D2@r34}iZdwX8JbS}ZaH?%oW#;vq^2<0Xh^!Jt4gmxG&rqXzi*ny2%k%3 zVFGq=0(@3Ys?7#T09rP)ZpoaviUViS47|gu*d#C>n6oiY-y`aZ!=Ge0&ysm9^9DAc zcWq^>Ghw^V-5u~8ll1beWPA2Jz3%V8p}BB5t>`fKN7FIfHMXJBNPb6N$G6)DpRc6{g?YBULR-o4I+ zdeXt;pEH|{91TclXJCl6fAGB8Cb_-&od|?Uq3qBkcJR!2B!wLsB|T1nb>(>1AVsDz zSZa*~_3avR=ay9sa@h|W$~=sIAQFNdM?3Nw9gBD(2Bh~sX!vQwH0HzFR3%Ics{rd$ z5@>ZUY~Y`r#zLm?(nED>PLm=^lHfMTYH(MXXr3EdF+5}ZE!z7xt^JNeuB`Y6noNcliLq7MR=HwBcbT|LoD?E}qr2OocRg~Y zkW|&)cStfC6}U8lg1%t$n}qDiZ;=*AdRml7FsX+{xl8}B2>Q(L#4xnbU#AK~Wn48} ze9B5#eHM1~eFUo>LIwLIBmRE%8~D6BQ2&RRIcn=xpe_tE1P%iSATNBP{KoK~AC#Ek z4oW|JCZSKr^JOsux$)pi@?!7-b#5x9Lz;USt}=LmbSnojCs5#%`R#l=W1CXWX*arz zxNR)%eR-Zvk^gq$ChcOVZ3YHOLDADEHyhj8^ja50-* zh@;~hSYa})$b<{`=ZQ%aUMYYo0Dz`b#EspNF)V@1eyd)uW0HQRdT5^;S5DsHjTiW{ zkr~|x$|(0!274Tib~!8^2f+NRS(!9rMuOLf3YcQa1jl15f4!J(#INRVU~?JRTn1Jn zoM1fjv0d*OI~(Tycyffa8OxlJnDWd)q_mn=?~;GN zAOSAh?vj^uVXaCZUR>ytoAyuk*q(_kW2PtIR-j4G7_ueTr-FA-cpf(1apftSpp z?fo%jG|*9Vafoqt@JuuteaUm+C>Ggv3q1~P``!Of(Qb{V8UP)oqXdqJv1oix;E){s zjs}y%w;GX59PNXEksG}H+8Y{rCMi?w2tl97!ENXC*13U@m_1h#pV0Y9yc#cK-tVu&{tcKpJ)t~`f#@e+K zo?{+vi*eZi^#RPZHc?bV>RHs3j_7_551iIcJ4uW1UbTVN8GI;uE#tW6m`?}#qUV61 zv)7q2QvY(q34;T-i7T3DBf z;cnGDr6NOOxrY_PG+)gJbI~Ui0twmab_)Bk)6=;a8oB}H7&@wwXn6FZw)xF-njd&1 zdhl-MNr0N>mw*esBn3bq%#(P0)9#aYPsa%q;u?o}|!ImG_y)y!oe&?GU9f2;w0mW8@4)T$7G)D7=ENp_>w+CM`#dv69Ve(!v) z?uxW=xT_6r^4S$0B&hUR-^V3?_qc9XWY)~;<6iP)rraXSE9U9t|^_){`wCqr}vK;!UUs6jhpo$zc}*ZZ!Xqa`PDh6rdt zD~7j4vJCv~i(%<#eQ6xA5Oh&$5B;1YF8C<)X>K0dBULI(s@Revu5@cF^jG~;*Ji_gcXTq zdJ{?Z-9kwOeB1GFH2yYIWF|Z8RTgVf-O*VK!D(551k#sHBq0>LUyN&ak$>6Tz|O(i5CP$HuuZ`|#-C zv081)ZM&Ul zP@ki2Yp?P+wz0$9n4$ig7|n_0ek2caTa1m_(=D~zX0Wd?Y@3rg^ON!sKc-0L>7e}O zpaV9ma?Xl~_9?RyEHNoS&y}fme3Q6gDC2?AjI{EPv&L8K;?tp>%>zVyg542v0WuXE z1ww6&i&CK>3^-cot1OJaPaC7#{syfr5)CyIwbh)GWR4R)X>U@S>}5*#Voqe{X{XC) zdlbN}kY55_{0)9doQ;sj1 zJqPvAIVjA<7QlPJi-oBiw^RAtj_8dXw^I^rMucWkIi9O>JQs>Po=XZ#r_JG?*S~=dyo+G@GuRyk7$f@E_u9#rURk}PN4L1YTIj3$ZS_sIrV9oS z{X}Btm5H7IT$AFujAgt8|dU_r&BQju8LA zdC#OZfz#lGMGqGhj&MwV`=bl^PV`dwHJF-+(Gu>r_CrG3{I(F03vuo>s?dLFjyPVq zc6cDF?0@IXdF}fjJ$XmwPJXt{Ae2&Ybul&BCrZyKCp?ikMQrQ8HmzaLn0f5UH`?Lawa+YA z@dVTLvjQeq06M`jVskM&$mh3}&y$E&1)U+Oq;lQO#VxiA+YO`6^3$< z>--Xh-drXncpf*hE6vcsXVR9t9z$vDIt^DKWU>HHcubr(?GbaC$mr_+w(&~sg~`Oe z!I>l^<@|4W*m1XwtK9wVk+Ut6I~P}Fd{y?4MY~Ub_c7|OJ|81UamY8AnPRs5 z&#%AxHuaB3$S{4}1^bP^QqCf)d-uAKGi}BV$YzJX?;pKTv+i!|ct#<2}j zMUSDvaT#R_Ua#@AuA_AZ-zUF`@HzPb72yZeCJX;)Fi>xqkgmpTF6E`T576AzJqf z+`BrzIzLx`;>V+_cT~~1mtb4q0q?x4^Wh)HFaB@ZD{`GstLQ<}rTr4`>Hp5vmjz-O zzv6%YO!M&KJTf7bNcYXF;nyNvtO|BpW>Hno%U_75{MzF7lF_{WT5w5d1F4Aqb$Be& zKk4W(x)q31!f@F5nXd~^h7BE!n#Z?4PUZqhQauDojts+b~|d@wm(^9I~}A0 za9ckX(Rp*wz|!P*EBZ^cRPu;C5&6WZ=bT5}5ez?I2>gMclKi{&s9yjYiGEBA?B^QPBTw^BMyl8o9$@I z*hP3S=7>05BQ!%Lq$Q5*EX_nuhTTa=I(~ZU8Umm&B;hp5VmrLw*B7~$$cmQxjX$({ zcS)+~(dF0;h2P-#dNi%;W5Ny*F-dRCq?pvFF*5=iJp*6Nt3|n$dXs9&mo2z1m`Lwn0FIqWMjwTtRST#=Y4}8=w7zz$$)Qz1{ z)EaxsYsw{KK}*O+(QdX`z1v3PI8UcAi*UzqWXNxQP%LbggzXNDX>cAZ{*z3HizNDX zbs|%U!|-H6>;)Djb!E50C>#!lu%7LGQILEQDGYs*`^m~PW<8P%g#^FftV%Y}B(&J7 zU4{rj3*|F=%{C-a6~6C9UspJ^TLV}Y?yk_`)Jlk3e2ALoR)ASvKu zaG@#28?Fi-;&VAV&mYd-y?b{C$Hp`I9P0(EasUx(0|cud-h6TPACZzAw}7sE5hZ`7 zCLsr`FjvH3&Tk{hfhc!y8L0>S4!*Qps1wVNsp~BxIeP_gN0+$H-ex*o*}=4(zK%Na z_PKnHzjQ7&@!RLnh56e>UWv?2;-w9Mc$c58SJKS8rVOn;RA-!dePrdBQ!# z@XAlr0s-H$`}#imn>aR@j#77w$Sj)~dH~Ak!LEb*Ble$sNGBB^R^j;s4NLMZAVvJU zaCzYxzqcWB#L0Y#!-j6Y*<`oW?adB1ztT5rpKS)g39<15ci@h#fn7X}BSTc&xMTEw zt;1!Jby;_LzrRtp?k82f@Uo&V`qy{&)#eefT?-a9kPKO^f=Fexrk|f?iv=Jz5zuv8 zR42=7x!M4Q;SNNPHs}5JQ>vB|N^U^nxA*(O==}q4| z37s0;3KyoF9+8x(b7lqzgAD&FED%J&sBb_o)eW(WZ(}7p-C!mTW^jSz16a)j{}nmm zanSdA%;0lcccb!)m=Gc+$IYeu33CO&0Gn+!8=iJP*9X27Meqg>eo%@xm+qE+-b=gh zY;@u@#+$5xCjRNUO1`Cy2)wdl7P->Y zs;*lvZXEH;YkeXCbORU;n_?Y>s$lt0gzTEUR$2AI{jE6^`^fcoh z-X2DZnAATPy=ZW9mtOQQ7&bRfTs2I6V{m3o)NM4u#I`23?M!T&6Wg|JO`M5s+qP}n z&hy;7-~FoY{c%n;R(02@Q@y)4dTqSa8wgDtXfE0P)aPHkVgjaI81oAH%sJiUkm|RG zSMp4dbc@<9s3pwd^)8p&bEND9v!Ih{2{xli#rb1J$3qM$F%3PugLY>hq!DLglM8me z9jEY85M4KNw~r_r_sz|qTuv9^TI|E~#_ZSy-APEb>X@{3jX}xjYU1toXan-vz;IEn zCh%a~7(%8m+$RH(Shs$HTS<(DWXF5k+gZL26~V)UhbTXx!&+<2!+-?-V3dod_0p<# z^_#`t8Hl?8uw#p~ZipNiq1OcMtrE3&WP?ft|U4m3)oY4ECC>1re~FCgh+; zd_HqOLa&wXVh(0>igH@`qG}<+2ykKZqgzlc9dcZu{0|a0H|d4=!jJfEmH`E1J9mah z2WiaCS91++ZS(2ov!MR5Ef4>``19HQU-0PS%KE!-%+XLW8EwY;On=P@>=zfztH4N; zLU87o741eG>hJ4hFf{TJEqPp10wvGCSv6(MYFlf<>N}gDGj3~Uiefab9*<-L&zGa4 zk9~r#iHTioa=pu2vbJc<%#Q7iR9!aan)hc>qNpY(sW-r5xzpuhCQ2hUf+OFuS7?Fw zux0UXk64HFZ7#dD;1skW(Ux?!;V!@RkpAc@_uU8l+=UJ9uIT^C_iNc%Gk8KoZYG7e zN0JQ3Ul?0SZCQ8#pC)f}wQRljLm5k^+A+EEEL4?4r5XFg*+|Cms(GFcA5Ap)su0_~ zz_PV*96H}f3l%(_y}Hl2bHmt*wEtP)UH^$;&LyOqY&cycj8coD{W{_Diivqhe~@1G zxfc!gYv|K?r`a*ZiO7)8_;1XO7TjcK^ewqU- z=+gYKoRt}4N#)y{RYDGMV>XF;wxHt9>*Sm*3>~q?_Uswgh6Akx?f{KXzyDN% z;!l&26-kFU@V1iYN%o1e%J$%)?I0GQr+&&&d(UgN}e?G%z~~S)@Y|xkSei& zfe)W8?B83?S8kKTOK_}<8k;%r5FT5c0Hcaul7IfSXQ#hc`p?8EYWn3n&POZfkm-W2 z5}j&AZ?QWAx!%@*_CeGfkr6q-HeK!9;b&{4UCdqznxxt5?Hj$tn|$3#e|Af#FA2cjLx{<1C(7}3a56%H8^w~>d4ply=_t>~fp|FXS z?A!_+p%Jo;C~9RtYpmL{f^7+4NKpxW#bHV8ie_N-89g2jvI+6;@1u_q0ozT+9nt)4 zH>K%uGr{J9XF9IdUkfyRQ;|vL2A?&|KH1gV`=bd&CCIUx>G?EF!r?L66hwG^Jsna) zJ#Y6`NI>S_PVz4`RCq!ZPaA}b-<*#Qk^6-%tM29tyknrRDhfOsTdUYUOOghd{Ej`;sZ}q8 z)0;`X-jzL&9IT6N;&mFfIV+Q0)-6k_jWDXxRrf%=6YSnLgzMW{)8%UPSa6{cM#c2g z4X#Tq)|>1Job+8Yl=^``Zp8wbkx9zgi_N}qUDBQ0_~kn!G)}~`BCQ5kC0~HL>w#6d zWKG?9un-e8CQ_6rOfm}Vw2s_Jbx?5=Y{Z~-7O}bYUN{)$oCSj3xs+p@Oyb7@$dj$H zuCK3&rnnxo_#dTbCtIxDIIdx5XMiquKekSs9K=9bsHJu8h@UoOm?dFNOc@+b zJYP!CwRkk|SdrdKQNGAQu`??DKcl&9w?JMYKfdY1Kr*UwikNSlh@+%6Gt%=_kq}AV z(@+aSg9TQGGvzoKrzK|NW0v1!?Jya;uY;^%NqnLF@IPYyQl3E;=FScVO8oO>{L3au z>kSR(zbl40p0FF60q^9lv`;uuYf2Vvd)q2!S&*_K<72uQjW36Zxrcx|=_I-Eq3W$Z zY@z%oojccfFuZf3nWCj)3nmqr=C*_t0ty{LlG;;ec%a50wyY`gI1=A0??Jv@d3jEDAwrtL=qx!mHJ;BIE2pNq!gRQ4NSY6} zb5Z+uZ6hwDIS{#tb#quJ2?%rp$va%(6; ze0M-aVg;mJr5BzOy zj~l(7K9pu+9x+cC)@@Yz4Z3cd^#+D&vcbH8W=HAFa?vweuEK|>0!P5Js`)Q94VO>lUrf5N-se^! zbSfa>IfdS{Mn!yGAkK!XA&@%;*rWAu-5fgri7(x*pk_L0088&BHn%~7#}k4~YgXgE z*nAtQoRV`s96s^*%!vXxFCl9ZwQrM26WYm1Ky;<;UKRS@WG<#PmvOf=T1l}pj!n5J zWGZHC)tPWhK27O%yCu7CSzAY4DfwAz~y?^za5QQgj3Lhe%krZX@13whw3NJz}Y;^{qNwPULKwK_Kse^I(~ zSU7j_4=@Z6v}#S%G++a+WOb3fGbeV1fyGL%K~ChtaJ$KhkY}R@gvZJ)4)wdl?dYdS z@?Xv6Gv=Rot%XL#Tw0ZMHxwHKh0EQ#OpvzR9MI-qu&)r4^ROWVq?k}p_GQZ5As8gf ze4L!al0IJ~JM<1@gN}BZGrX5LUrfOR^6{8ip@$1YS>u41QB?dBKf`^uL$1z>$i~BH z#!UsiAAG|vnQ8*kBUt{cg(%T8z1R*v9;4Jj++3Da1=^;P*;O1~b?x{1_+S9t&~|5} zCNqvaL;-Z48mVuoMM`J6NAx8q5+QoL#TK;;K0OQvM zRQObC%8Q}5sbLHT^0vC_?F3ppyv5Jpp3M;>mQ1`GnoL~$%>Ev|`$iaB=zIS|OJ-Ws zf{CW61&C^rVj$4wMtT>IYuw9?srk-71~uA7Vi(=W+SH&hL2JdlQ;)aA&0wWtTXQ3m zZPiw?N|8mWrPB6lk`}_6$N*2`Q-V{!)sZhYKK>Kh4aJGi2{loWXzztljx#ZSb=PBu|!vulvRK)NUCvM8b4mpM&Km_3Ch-ZZ?TOHOSvO z-DmZsb|3H^l}dzX%2utFDZWOnAkZZ_ zcu@g%7zED2K7mb-EV!7D}kH*4hGMYn#+zG9%)R0r-hHl3;i!N=j}n~_oAL! z@2`WN*WE*H1X=uUC2yIFKMrpjFKL7>OJUDl2PS1o$82eIx*jV)kEO998oyhsvd0Of z9`~K$UjX0^x5qOKA3Ejx@)=?ps0uVoVi3_w?#r?{He#huQ3>;-wRr#mZw_nMyPRihrKQxE;_ z-FcoD-H+j`HbUSjFq@pNuG#V6o{(YtZGY<`YOD2q2pCzq)Gr6(v+LI!A9_bP@#7Wo zb?4#r#^lirA1K_s+vi7&cmdR)C;SvY^g{zSv6%TbGT;GnTc~n5%TNXMojH?O$F9VZ zQXO{FH)QKNsm@ACZAQmkl6HW%`m(>;9Jdau+DOVsrpU_33Aq;%muEKJ^SwN@SR=YUwn$OW4-<^cC2b@r(NdnXa`EC%rUX#^!i!3a^~?NnKq!U6UBBk?~d_w(05=TtlbN z5s^zu<7ndB6rZgiMTp6>D5r9F8Z`8L#MO|L6a zvOu%;$Cs;#xuv$Tv$eIpwl#}=M_2iFR%tx(t=hUL^X&Ed6Qzz`L7PIQ$=0&BE~C6c zOV%d8h>X=Gn6r-DPd*92Br@c0uT_qO=oQX>+j&VM*rZje(s1k{V zRYKxV)qkXtW!}}?7M=QcR;?jRM@KT`*|M-6N&#(~mX>5qI%v#oKMXCJIJu&JWVl#F zd%#u@zge6K00wY`5(C3zVdLU{`+3b&Fvdy^*MF1<0N+>ye7{JlJ=OrQN|*%vH+#9c z?z^IHKu({t7s9(+)H(H8H$sQYdY`k&qI3B;!1>z9_6NYn&+~1E?~SSEbCZL?{dG+s zZN_V_yMx|uJjAW%gei^x!A!j7>*7M7iSTQ#K)@mFbIVIPD(wcG*p}z~4p1&3=;8I6Q73e}F#?_eXr9w@ zT+dw?zJ~dn(s(Ppx5;w+KiMkD+VH1>O0A>8R*Ot9#pDnZyA~#5*6w7vf&~rUP=l5A3$7@C1N+3r!93-lxU=MmIilQGT2r zGq5id#|!`lyRXAFzmAi$7l7SeQ=HG4$HR*?u>V7^6^LKc3LIS1Z+}^07& zd3Af9UF5JP`7E~dIDNrRcf1I^d>NpB9r=ha$hR@Ni~+xL&n|AZdu|E=C25`evtNE< zrVUP3xwAL#ek9zVFWSHor&?g#N#K(}CD4oDKbcy6kQ?p2@;Zab?12Sz&`GEQ=5lLY z0P*yIuolgL8H@#scEHSJv2uejQ-a)#8SKLuZzT|X`Fdg^>TF2G!G*r3F)*zrJ>*B{ zrvBKjDA3WP-E= zG{yB3*%;Tu9Z>-{2%YwROAUHoFIaN=0~psgK3kX^gl-E(h_+q8oP(y{0$=OTY4ifO z&#*hs*RV5w;?LVx0v~T%Hv%rt8+Kj~=`B5PI|3dXMwmUo$Cd7fqog#xi}Mw}x5<(n z*BxoXxBLnIyY89KeZtSFZ2dO?c%1hG=FaWgIbuk|i%R#`+YGvC5AbFN*n(^Oep0dX zA@3%K=X+PP^ENut*!|MjvO|*9Y5!c%0=(wQeP539yZLvveqXZlHMf8B_0hxc-u*l) z+O*{7@lxVc#UYz#=kum)*Zwxs;|j#B(P+I7y6N$I=!>A~@k?q3L?G%s%oc0|XfVGH ze$&jfpHb~7+J3B|0v{;E3EiLS{H6t7lj2PMKGSojpyqNV{Pu`POuKjMk;{1*Y0b7LKZ_iM^4`f4jMLmso6>(pu55V_&U;=|4 zpxe#+0e+=Qw+DDJ!r*?rhKRoH)8{wIdtb6q!*$pH<#%5w-t`n==P|Xi&D!R7bWV5) zyaTrT?xeNs03tpR*a=<&xt>0Aw{!ukGds5_%h_(70R86r6Cdw8qn^7vyPl7v?`%jT z4EkQX*U~4xk53z^(|VtyGrW(@6atpE?X9j~PBXTjZ_-J2o18#VJI}+2l}~_Q$KmIC zZqGxR8~;Z>L+5J>!`m||;Pt#l*LQC03G-s7rz+x`{nP2nr-DJh?X%BG)vx9#Rl=dSu?Dd%(7 z4|vMw_O-I}wv4D>>wEe_2#|Jufz5H4yJVsNd`H~5Kb7|*ebL<;|FTPedrQ-2=sB8Q z%x>{J#q4%ov(j(N^L?V*c`IW0yocI$eHHBiv_@^ewj*}hdc7m^dq}?r+I?z2WbV9= zT;_T|%>nI)u5y9>Yc+VUmmE1?vj;uzRWrWL-p|c7TlG$^XXqRPv;3KW$Bu5-1+VS5 zg%3UZ9aK5rix~O$C=TBi#_K7P~lhq@K^n7 z2vgv-2o z1%2KXA_c>kZ#^kT7^zsy|uv#5lR7qzlS#hZ1@VHpzJkWTQakdT-4Ia^xt}M47}M(_D%iu7;$-7qgF< zqEItXZd6XEd@sqQdcL*giikGJg9ITWvO=50v4>jHMJbN8_>{v3djfQ&p&%$z&Hmk% z(oZ3V_~9%z?FSGhSANbuM-=3kIbJRvX|sMFdmGaxy0-F#z2TT&(7Rq@!vN#yc$ijN6%)X&B}s*&VcBw-%=~HgDsluW-kb~7qJ6X;>2KCu zt$~j-c+Hw7X=jcqT-4#pf}gRp4#kc}11VL}u(^$_BmBylSuWjD(816xWAOF9rMmk+ zjy8rgeTt1VKBDECwE{&lOOv&)#3UPdG#~llPZ`Y^9D=qJgKH?8ke$`$m~k72NreME zxeZmLzsg5Tsw&|zhX%>?lGHUs8|Qa(?;*)1AI{gRon}yR>6*3{v%d7x_^42ft=l_P z9_5eK+;Kn@=c6%L0gmU+{yH$ai|lObb)aC0g*nLp;lx5v;d+ZIv~;Lp{!m8{M>MInPe>=a_`}DY|uY3Du#P9iSw3;C@UG}%GYcQ4{>7i8HX8aeakUz9xGGY0&QCdNzmTvFrV`%_xB)Tld2#9H z)Q{R5y9>^gf;4#S9eD_&{b!AvUCe`gj0y`koYr?4-VM(hRbJAv_#+KG4{{0q4)w2} zn9}LeuaGqm4ANNiN6#8%Y0f!k41R`TpG6B~hskZOrQT&tj1ybaU9H0I3T&Yt-j_?f zick1JAEzbay|xU&za-m`4#rsG>t~2xBtan}jeNh%W#`H_O-=3%8g$Dij=&oZ0YZl! zw0kCzz~5VKQ~xCKs4|kEPQdkDI@u;fGKT`4bPZpq9E?vC;bx}5Wm9R&7318LeyFYw zIuTLtwMh!16DTF2T5(&3^GK*s4=R=fKW3DYz!X$2_V}wFV?9-j#?hAC(kvWWplZzZuYdf%E0*I z$jcjQ*V@)en~~`Lkvys_;$2@G9mA_EmUFt-;kVJL4yTAP5Zdcly6Vj(yG9G`mf#@Y zQBfq%c68ReAB(zD4^QhDl4_AMGTytjU5}z8{WTu%Rj4412gJd%RIh+nYzxRy`B?5h z)oqH5Zj_+-ht#O)+CEjTmiR~~sf4slUKDr_I@Kh1kQ8rts2pp`E250MSV1vosr0uz z%7u_v;|%l%b_9a*3O6Z^hJU`QxdI%G{Bh)nW&v7NLi~MdWA_4O*%Pj+Ps*!)gVgM) z%{Tj5sEHxT!Xu0}SwsXbT?LzVqVch8pTRHt`Q8P@%&ssFpc569-n{8^wfogjU9`G* zM7@XkDHJ%nby6b$dY8ozN8Y^RU7()d((<7~d;xppq`-MR=VF1%3rCx;KBpZVxbiBs z#-)EVqIB$JxjfDA>SZCgYDT)2ka;)X$PGU8(cGJrD48g=chimujBk_s4xCyrt;_se4-U0KL-(OARJ&hRjM1 zOU?QUcIEvhjppC`wN`W;Icf#wj-pbtHSg{mGK-t<>$s1Wr$_6Def6c10any{0Ryy^ zv@qPw&a1YwrMpkr!OKLx?Lo^jA-<_H7Y!vLq)Z|D9MM^;FY??eIxZTNyT{dK zn=3E9iko#xc$C4uGj3i->m{!Ynlqx_ND#m!i(rktF&=`=Q@w^f7p`4NWB2;Qt(m{2 z`z=L=6Y@qbobcg6zr^tfT?hppsleW68#`k8&nh2Ae+e(v-A7xbp=hAK{DaGrHa>N1 zs4pwkjyzF_$`NRl|JFcm3}8XX|M>5*`ds>xB|#eevk?EOF^cW7*eiS=O{kH@=8)SD zUJD1Kv8oQ&Zufmd(xcmy5?{a!WE2kE`0sKY;ixf)vHAKIRC?CMgfT1S!8j}VUzqBs zlLs0QS!2P5)30E7_kjFC*tq9dLW4sP#{aONC*1%sQ=-M+Qh)TO&e9|2k@qboTJY*&db_Q2HMl9);|CtI6KY{Qd z+nH0c1q5LvrSEQy+oN9FFxv`J}q8Bv53#D8=Rr;hE()_{<`fM`Wt} z7)99%4MkpPN1g)_$p=SnVUHtpzwAPM(&b8Pg^bRaL2)?SD(EgRZy(q>>x=6O8ib+B zL!HEB)H0hIry`Ye4hk;8OkfUoYo%(ADw$0sUB;ahx+I++T84BG_7aCd#Q4N`vZJvv zvOufj_lPeRM(o+k{(f{%ovAe?OeK0IiRylPv~p^RDXDc}*k_TFYUZ0t`w-Zs6sn4f zs}uY+(X)&Z8*~DBLh0Pli`t7kKi>iNj3DY5VEeoRXJCbB04oDb5SOJOFauwil@C0+318lt!mHJRJ#AC&>)$7t!K))5?aoy zG7F`wmI$6CXtB^faSVL zX^@F+I7ff`x}&^zv3wOjxe|~HwbGNMI1~ag+JW(&ttT~oJ2-^T?AUAi*BXJ_2Ub1( z?kkhpNL;G;9@-r-Ey!AY*G~lef}nU>L1H{GXJoLAqfCY_SUzc?7xEG z?~h7^_g~jofA1v0saRed8kA2NK*mFe#*!Ah#*suHf{K~1EBYsNO{pVlVj5I}8+Bh@sH`3ynE1-4*j)ngdX*-H~0xI=gx1%pZ{CxeS@5C z5je@zp3N}|wyQQJnS8dT`6cRe?*%R$En*~z^kXM;rj}>yBfM2;eSMc!{V27V#7Da6 zY~552V~;VZcyrLX_;jZH8T*qT!pfE|0EZR3Aa|13L75fb1M;?6{bE1#IMXVHS4f%D zsLW;kJu|!-OGg^N2+YwWX<+`2jK=JjQKoT6qw+9LM67g5vl4R3J%U!b1T z4?BgWLIREJKX^rk6?4RPeNMXN4N&VBJrf7Ui?ZU!ZwE(UahXYa#>*_vXf4%ZEkZ)j z7ydL~fMQ_JuGPgoc4mIfp1|jjRcVT=u4w-i_P?5Au#CJ&^QKLDR7gRU#earB$>&Ne2X*CF4$mL0po0QZR0i)mwWXvjD*SsXuW85by((M&=%Mpml zXhcwvcwBHM1j>!0g&=g_(pN01@?n)jc(C?9`Ue}>#UB4M|Ls%!%@&990@ zN&3kRwux4`2u+&@0jPj}!R~}EI{Jl62eY!B_ks#k5b7RA>nd8tbaNhCA;eW}6AS(yq)mI5I~i01NZkDxg0s`D z5-p0~TYqi)AlUz)YUs_3^dY4Bs59|p7(ZwIxNQ4LCz@NN9DKV!$w?l5rbDsQ^h;3I zSfSyvVS8B>on!_Q1SS$sVl#u+*B}v`@t=hoq0IfYu2UfbPL+;PU;;wZT@C_>zX&7| z2Tf*Vdr|xY>ci_G@Dh9%LKJ}lp@=|$7BrGWy5mD5v0h$+LgB8yv8S$w=Zj znFn<&p~m_y84FECWztk7(W#ic!U(v}nFk8N?Vaa_zBlAt#r^a)5FB9KtS#vl0Yc>oCX z0>yIy0>bUUQ)WOzn=tpy9grCMKi|&#GZ6GzVBZBe*YSdA4?w2nAs)^{D^1dqg1_%=`a?i`U-7Ijua6Y~Ow& zCmqCffBN3W(wmdx!TXG#W&9qM_2SjW8)+v>I07TEwu-F8m9;XVPpzH5psuc{ocNQy z>N2NJJr`|k~sFFa<;iQO&PcI??ZrDU=Shv}S48tQzVyb(D1DIg^tcM?z;xWZ5 zi>ShZ1Yf5^pO-|Sz*VKK2xYnTyz9j;w*4mek16gxP##HL9Go(dP)r>Eqx~)R%|Dr& zv?>znD}(Vj98-SoSx;ejOa~9AP=s352a2em&`2yq5ZEk{4j~cJXjm;sn6QSo@KO&~ zId)CsbcInn@b%`bS(t1TOh7E*;`Bs4g(Nf&Cw?b8lhZS1yAO9OD6gTk^eS)_Hc5Q` zm22}f64p|wAr%ISpRROH%jVI2)qi$tL8%iMiuookC~Tc&&XDtihx5& z7~#@cQNDu7K6&4+(#k>V_&KZUnhSJTFqWb()w@iKa&fZM>y&xmz5IhblJ5pb5I^~!X>ebC;26;Vx7&eI3e=bI|H0>WZVH+p zxJNqqwVrScbK`76-mpn~EVkKP&Ub2sY;n2~WTnZ5 zCKp<3uupbGKuk3QnnxWfj(*KWc1PjX{!%qjdRh3>b>*@z{)1^*z)DKBX|QgM;8FCC zxagm26esF5+Qk48`f6(Fr=J=9^Qq^S9!`*RBq!K$m3kB@6^F7Yuw5=%<(tBh4TGmu zw-HE1MmD8+sfrpUYQ$4@&fXU4THj1J0muS6+RslvEXNdz%4XM@Gk$SPxD}+5me~+r zP5G3Or*OcmRugI=IeO3lncHfbaF;I*8}MAVLs7}?rTn-q$V zZg5LO{td-Ulvw1<%`@G2OOv7b6BXBBm(I!O>=jUdA=~6QAsL!c(Ra=}(QF8T%TGToLQf^eYTpK$dsTWL)D#duKRBBpVzX zuF}L=lFEHHNW^aSy^0FCnghBO!LK#)Q3zu>vB_9{@R3YKTtQ5@N!DL$${OLb2jt(! zF36eeqLTmwxUAou$cckv7-Y_M1}N6IynDJB;foG}BR@c~xWz9+78G6_YVDhQIs+P5 z&DOU>6Fa?h35j#;+lKwA@h$haIzakGLK($lT!?#8=31u^w!|VLz0@Jxzm-YUu*f)y za{mLCR981elW8vnRQPK5hZs;z?&aYdiJ!A%rp|W+3!u#+VRXLK{5hv!)idAAKom1T zz$MPU=g%P)cs|5p?;9Ja0x2_^=Kl2Cl5KeZz5{k9x<3lq8~f1w?cMizOM7_!nm*hZ zPhakPgJYS%G9WEQsE+FgAx!`sTd)5j^O4FFvx)KXBwuyVGF|QSsrm6Jm{1T_wQ>MM zxEmN(8?%L3uS}(`*O}vqc=bf%r-we7M zd7|*)wOX*Z4t`>(W1QPi{ncjMy+=Q(PX`%)WBa* zMa#ZWx05VUyE|0;7sMc)!ioZ2AUbFozS$+r8v@cx+g`&AKF5eP);~;?^FB*~4Q@~K zXOnq2nqk0h{D$8n39iH6t#||t#HrTI$U?mDws+S|wAF;gF?#B@R~ek*29AiHIlN;n zw}WE6k&nR&QGxOgT0NQ8BQrI&^CO-5&WhWPjNwq)NcIHbd9l?(jPezB^oSrz&(F{o24j} zlH*%kIVa<`237+OfSjF%uCxU&uL5T(+=zDqf7*xuh=ag0qt7tHudQLfY6T?boLBuo zkOP6(ikepe)05vIc^Y6K=~MXJUfyD2|od1h}{sRKvwMGo7;GO>) zjwl=yg2`WFTq{G{D$7X7|1vVh9xcyQnhq6xKtR39t&$&#!%HYJjZU#_#bG=C%&xO9TCHmn+1#G-@9jpq%A{81#Q+$wtlNoqEKHL+TH z9V-ivxPs9iu}X)anQE3)NURqZdrr^K4Wa>kRlmcFFpxPE|I=DpRwt;J*(!f&aFk=6iu>dcMn>;W+X89Y-dxefg@WX1^4eRr*yw|Xac3Jk7y}mlh3&W^gDl1(% z#xWLevo@nL0S3=z&*6r^j?Ss`2LvT|cQP_J6y?38gS`$ZgXqS>4N~gJL!mtG4HxQA zuyEKLCyw$B!VkEa-Hw%?t|DZ$0E9a+iHn=-(eJ=k^3otCH|OC^d>3y#nRfi0a<~fH zf2}8#?K7fyQfAq(&(LM%YB@}Kvi5A7AIQDQql_W!Ha#6&Ab-QlDzakZXo`*J{i#^5 zuK!5Qac4%L$%dYlR2N)sDx&6z51txkc_DcIf$|Rw1))6H7oEnGX7(pzy`sO7hXAzl z3G*^JMjP3oDEv5agAhy&PbfO6Ve}`abcCy0^s+XD_)Ms8?D%XW!+o@26>j0?ZyUM$ zM<%iqC;$h3DFVq8+Emh3#MF~tLHFRr0FPfHi4{A@{by&RiIiKY=cHj~cJMODJ0ze~ za9W+jrQ(1GVHhL#r@#F7^an}1c1o!5+;1oNQ0y*MYVl;qyGq8bjl%HpjBwbw?CXWXDRj>1oeJF$&Z0#2`TQ&4)(XVjA!Emb#O-O)qMqtSWw)%jOQc4lsS>CVyf?h@VZ)75> zOjlfD*V)f~L3sT;4{|1=AtZK!KtlItu%f^J?=@@ZzQkPu}uSf(Gd7X;zaV&zL zm|-J*awd<+K(g!!;m9;z{@Eo;~Aq0n&TL|v1#Wom-#mG1MgUNsha?;); z2#aw}egp~J)L@MWQl{ry2>kUW{chwN`yT|{pg*=}!*961uOeYsj7Z>+e|l?^Ng<=* z&rYJ#O(vd~o_OMiAo`t1m@iNV0tZW0?#i741lq#t@4AK~h<-=?~8#+uNP$Ftx zZ87`h_EOBNOnnv(9I}Xb8`?~v{V+RSvJ_!S5RNxt`d?K>GzHum+>!E5-PqzFG0$pN zeoiXoKWn)zDFKY=BZVlS%m*Sv0A)s>#qGA<`2Kq*CeZ&y{?C{@+4`?V%K_ z2Rg$Wrvs@??%ND|d^LMMZqou81iN#$x8d-C4x$CTdC0OI6XwZsPML4eLg6M@P|x3c zy@MF21SRl$NU7>~RXEpLGFH@eZF1RV~)G3)3tsi(Q;G=LR zJOc=?x@H!`ia@w=kj^|qTP3(H0_D7KZNmIpo7gUb{#@bVMy=USl$$e{a;7v*6V;7| zbc`1Mv(_G5llpK$CMa8|aPSGXc`>5@Y@xoegds;s^9i-*D*y_fFB)yWJbK3_mVVzM zzfCs4u$z5$_hYE*Q{2QW>AJ_+hS^QPG0UJ*Xb%aXDf!~D{!FTCvqU`g!%cx~efJ&;Rt<#(r9kI( zJgJUd?wltJgfGvne#QFTJdxE3v{wbuoy5Ah9`! zplZ*PYcXcb#8$$Kpy^G_flqgCJU?z8OCC|u z{SWMP#$wZw%7xHO+3wtl-7Fh^TkbWhlulV^V*5z+Zu3IPAl_Xs+}ql3Ntzn63avF zI^D|;-HVoOjz|w@!tK3|L@Wqg_G;8H4|U09(CB@cbHy~cp-ovt+K+;c1bdLx?)vIb zUR|45wfN(*xp0v~w_t@(=zoT_c|? z-fX((X!okKyec2U-IQD;-m#Ax%hP+e_L-;8&X&TOHT}s-?sXY$%KeJwOR%D(Syu$w zT+#*}AWptNk>lGNevmY~6(`2m-yF1`eGX3Q7&q3YGA{7Xi=PU^>m0l29N5kA55=*N z>bhI*M}#l8u~DgZkVWpt6H1qN^2`>7(E5tKd{qEUm$H?haLpeG%5H5{A2xlbi!wjz zm&*NIDd?2(sxUy=Cj3e6_?G2&LE|8IoW}`0N_d;%pBM5$Znj%dq7=HfX{1tb#(2_g zBPPzLc;8t}EliixNv=XQ6!n%ZA@I=$VCQiTuP8Qi0(>Rp1V)_&KKOA0Z#=#&%?XL`ys!e1G`hQYxfzVnhi&w$qxd|!oo#Lhg;ULQpZz}Sr ztb@y;m6Igx{EaVJ&hmO>FEWi2#>|KE_5NAnXWmX;?Af$=W51QY8Ve^(khdtCipH>w zxBd#j(rH%C5Xq`ELgauLXXxwBM;u{sy%s8wg&ecD#iiYaveZujfr{w zI%Px5lavW;eX&NFf{Vl)5So?-Kqj}Wq)TVFy`<(cmefQCnP$X2(zvj$aXjkx_m|R9 zg|wDu`L& zDrEf)(}RQ}dIX)=&|8M5mgUqgp(<}&rj=DwRnm<0Fw*lFD56=JXyR<3%e&A18)!i` z=0Y_oMgu)NTLkB{VNYw=vPAI_Doh1d<6W=Kg=JXItoB2so^-O6V;3_S8UsC?}~gXx*p!!iK=xCtlz)3K-}KajC&Ab*ePNJ3E_=zU zlZNDyOVb{Y6RE`@tX4Cb?zk$*c>4Z26U`~^a4>1G3i-;0vnxk&qg6~#%uDd*(lI`Q zE;H3{X2*0oyJfoErrb3aZP{uS(xGvDOmWrpUAYS4`~4(t62Y%Wy~Cg)bm8q2Qd>@C8D)=jr#vlWxZWfxKsTl3t*$WyCq zsY;*jj@_4(Eyx!BbK;Q zY7{EvEtYMvT1!QC|GehJ(w)B8oTzA%S>|JvJ#8K*@iZt;P0udUFr_(uc(ZzYORvUV zoLwzDrtm=N6LEAMpL3QqKGz>hAsH@0r02V;R}9&q$WCj4X|P&lVwD-6Ko3 zY>h1{%nXyI&`@?tNY*Sxl20?1NXgD1%UH6tAd#}nce=a(gYQr0bsmrFw{tzu&qB&v3k4)1*SxsuR=>tt#{B@yg_Gf6EmU$-VhtoOqg1Da9E|cy^w?0%W zilR>Z)+};cFkru9*Q=FtKW2U7M4n^l)zd6npy^X#Edw%E*V~o0u9ooY3%KAzmw3J; zTrW1|rfjOYcI$r5dFE1>w-qJ&2!F=U0-8WR#psJxBMAXcf~~ z*(28;$~JXo8TG1b3!JZ6Vh;`7es<}zty80atjR<3;OCu%87&{O=kdSkTDFF7Z#1s@ zDOKTDCbI%%H8#~u4lT&qXPhTb78QU<*o2k|P$Am`bvE-b*dpUC;|p&UQtCZ597gN^!+)k=mihO;saCwwh6`H$V3)e@ngLTf<7o4_cXy6i8JqkiPsz za~X(*k6kJ8e_jw~?CbF){n;z!<=)2p!p@*3&tOyb0|g70skh_IMxEaTU(|+AMFzDM zJk#wPOAnBZs&f(wDPa6OJV?xYWVt9>Cw{6fOjsAscte429Grdtf6ZwBIs3W`KmNzX z0KX7A{DEO}u0N7v z?c7hunf-5mm60>s)zdq3=cj9?K)uB7{X@?1_CSZ0Zd-a5&w?D`)OYf{OYv~1>5%Pc zxIkG|!Rf1O?{9V`wV0Jihs3`AD57%919~kuau%_s=|v@+ud-62{nnf;UcEmJuky7i zeRi#bFLCA)&t7CTJmw6yyXu!}*O~jzs(-D%orjrVKXOYMM-yQS@NvE)59D(^wLgCJ za}d->jj`nIX?^@Y%KmZ~q|c}3ohL%gR15!BM2dGkWHqS%((K$5LG6daB|5PpToDG| zcN}U&V}+UK}ztIh>_jE5lU3 z0>3G42q^T{G92CjbB*Ipu}h+YPS+pW-Cb`Xm033ErK+ty)%c}#W(j~ArT_f^j zjoaaqki)h)wKyRn$`gl-G(b!r9nd>B+7q7~pz$NXI8(?h@NOSRz=xEJLNVUq!6gz2 z!Xdu5Msr6kaU2xs|WV=lqB3Y0cpu;$7#e z0wfAYx@|_R0}F~TpPOGUYy`<7IW(jdeaXaN6mLe$%5`+k5BZ62Z^k@sxSNdjJmE{c z!!MW0fbKE=CiLi`e)c=BsU5~G2kw8% z*E@_eGzbJK!$ugKd87$|4j>AEJ17MKM;chkR{PhxQ6VrvL=-@U01^h0r$9XJNOmF= z5itzraku?NfDY6KG9#1)HUI(?&>=7r`L6=#Ab^MZ5b9n?OcCOvR%+ltQTaumGDkb$ zvQ7j}dd!fraFKiYWb*)sty&oYj<%ZgHX^7fn;5X8LpfwvNf=&{2v0(oU~0C=fbo{8 z4Ua(w9qLjErPA%*GlpMn@2bfWsNd{kujI^Z4#C5CgI+8I#JWE1_sJj^)cYcjJ|K_G_7( z?@D565U8{aH;lIQ=sHsTH+wUZ$|{UfGKX3h)>U@Jf+VF~4CwKIB+D)`<}FJ!nJCSo zXU?qtM3W6aLG;Wi4a|sE2Pzb#2iq`ADCYl95qQAS2)tg>LV-ss29;K6)(&SUZOy6Z zPu}(`h`K07uADSFO;?vb^}x?yeM4_GdnVl`%>VrJix1HfLtX2rLG9{>vgXhP%dbc4 zo`S%Tnqx*6yFd7d2KX(c=q{$0RdGXNpF+=mKB!CK9!w8Ir9BF)|iM7_*1=SzZ2(w^yy_+K>=N9 z21=v>u7CC*SILC$OyN@8;8mnRjk&c&1=+xYbS_ySeH?~tydA;U&zF}H3A4<_UCOz& zj>e$FsdM4=p&r#0EIDYs+B6tnSNn)WGCJ*-qzf7)35ItuDZp&6h?P=t08JfEr(n)Q z4b2~hewEm}^`Z-X6uml+ov$M+fuU>|G?f_Q7QdmdFkGzU{iBaz?ma|hBrSsvp&R?auk*VT&n{zZ(gKeO)8)m1w@4$Qy=i6fy zyXy`jE`Y>%=utmVd^jDp3AI zUsEDbTmRA`x07$uPMhfIdJWKtq|X)<2eQJI{t)&p6?1P?SK?KRS7HnCu|~o=RA`S( zPRQWqefN=t8v}fs)9%_N|Hii+*E!>RsP{RIu7|&m4TNzb-a*VcpQ<6=b;u49blA9C zT6{n{Y`$w@a%oUUNPIgv-%6~{mp}zr65g_N#!oWfsI!ES^Xv`-i~u~P0hq1|pc4b(2a14{qpZ}D5jgI&}0%7l+<#C2tk)eQ$b8`0G(;a`dpR78NHtwcal1gZ)sMYJKoWW@I5H3x9x8ajFX&Ix4r z5=S^@6*f1E?|;TcaxD?<9N4&-P=^FAKf1X?bwN94P+c~@>bon1za-QnSn#e}z`Hor zZOtGp{Vyx)eT=uh z9N#vTOSk^@N6h10TzSOEIT)nVox~*~%MLHjkN`hrge4p37S^5kf71miZ{^3m>wz&hbcl>8%QQm8crqiWQU0=zcwR^5s=BKVRr&F3bYg`=Z;%y!B zi8FIj#oQE9%IaiBs!q%QpfNVEBOF$K%-UJJ>^pWZ|JrwtUm{Z3SJBqTa3{qL>T;-$ zojz&RkC|3_KKqHG5Y87_k8vCEB9?5^Qm9bT^pK@OP4Bq+4%T`Xw~z@#!sWi zK38aO;1!earFBoUOI`ci!=ZjC%K|ySi0jQxCa&OwmpFU@HVbmd;Vo_FY-em7EoZsUTwY`IW#plmj?jiafiXzi<bpKi zZuHCthTP)te+#_f%EM32kwZq8B>E7;*W{6L0IwG*30de6(OxOK$BHF0;fI5<2zuNf z_zjuxHzWVRZ^(qd8OeknOJ>3^#PaXH&xHT40x7|8hWjs(eb)4ulK6p##IB2dlW%xa zje{&Xv>LDV7GExsf4_#!XA4gFX+fDvc~1QqoTaAYq2Q%p2f@HkSKpDn-RyBu`}BM- zjW%)hyPs?GLRwprs7aE1B4F$t#970>zXpmS?Il)9z;oz`OwFOt|XUsnSzPPztd zUreps;`E%Y?fvnI|tT_j~#jkBp^Pn)@9L4CeDFmx$hdK;_~h38Y`UpvJ+lbGsFSa*xpga zbR=AG4S6`~7;z7M)NeaP{=0C`7xyRrkK`|yF@FcsPL_(=-|zSH)=w1-#y&u5($_x! zc&{yiZECtnX49>1UMRb6)lv@TzMX|Q9M8wzc8xmXnH(%BSPGXBJQ}R zZBsK^?v0B{R6}K54mw!*GWqVvks)Db``F7t{5?X;9LMdhe3cP)wm)7PZO7U)H%H`+ z#=X+&o(UefsZ~&R3%N|fq)P}|cl$RfVa3h(?y*Rm3^ksQiqeM5sHvN#X#3qpji^l) ztJ-FEOHHsS1#EgW9nVeE!E`>}o>K#>z)V|nMMy_YvQl)RJ##+f|GnpEzdp0%W~!k3 zWJTABsQ49pDW5%1Dfqd`xKBUpyL-7lLSR5Mp-0o;28WAGc#OE*xxSHC3IB_6nwlhb z_f>@EP;#DE2F};n$^kVTevTz(Rg$cS@#9fqRkVBCwwy#aaPAgb2@#sIk*S)tl z+LHyO^Y+N@yf^6)Klo2RiEQX+ZznhS1n&P6VCntR5`%K+fUTP`Pe4u@=YG2Dn($q_ z)jw?9A3@(H*$?u}Qs}L5~X8M%D)8BL@3$Wz?{tq@o)&c+k diff --git a/docs/img/spinner.gif b/docs/img/spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..e3038d0a42c55b1a07caecb7c7a6cbac982ec09d GIT binary patch literal 1849 zcmb8wZBSF$83*voz31lM+?V7Kkqwb`LI|3K#DupH#kDs91c6du6?SMB!bsTr6|ge_{#vAVj^!DyNA-l zJ&$jDFNv;BTZXX@Qk-7+S5ErF>mkOcZ@lQv>F1VyCEMe2Ud@f<|L%#&QJi${E`2lR zqKFaW2Y$aTRxUY&ae$IHsN;Z;rdZ%CjYLTv!tMi234j-ON=CnvK-1QU|MG$YErn{gHZ@0Q6&?xSyply?S$EVNXH;gp?S5kV2-)$ga^gw`(f4Mm_Y(`RbgRkQTHF2@zL}dCiLk$RoZIc{xZL z_J*d5)Kb;#oKCFyfL*NGSs?y;e(QKvPJe1#G)h5*6E(?L9$nt?UaQJfP^$GDL0PU; z?r}C|);JQ4HES3w5VMlY7x6xfJAzDKlHE~>x;D`Fa=WygYot{pfFehH69o9pK|72W zwC6?t^AnATIJa=kewn=ep?Nk(aZ*pZo}51`S=^)jPRb`~l^VE}08>P3OJtQlXx1K8 z8Q}_u=F*fS;=k=?(fIv#+%811NTx8^}rHwvH%LbYmpFl9p1A{Idh@2x$ zuVp7)VD9}Uc(*(C**!QOdS(6B)$5^Tq5p3q*7un&_Z-NKEiEYg$D{Uq&sa>wj|za5 zJ6M~p)z+E6*X${8j6Ci+sqZ}zxeCAo0gZmZuhl+)Q%1U$Br_`NXcA-3yBdYMha+{o z{?q0Q(kaR2n`M29{!pwpgX6+CPQEgIO%x*0#!TC=c-ZPSkLO>OcmQUao5%-3w)U`F zRz?uGCEKQDh!TQPDmyd;iDX$TkMIe)%61q51Y2b-ie4r00!csilXgKL$txqj|6D(# z@(#!nQ}3R1JGeB3B5Tuqdvyg@*!-bq`9`pmasNGvy9^*+cd1Y*g>HK#rl7i79QQAG zl4SL_wW@WY1d+F?j0gFInGhsRrqvV3SKl{oqW+;9!fu|u@J)h4WM!0Cu02l@p60b#5M9c{dKh=_eRw~yl zWT0gw8RePzf%i8X&twiB|LF0bI@CYE{x1PI;Ylr4RJzU#Zc0j!c07g&q7=_eSd(sH z9VKChd?}^52IKcMqolAWiQH;HSp1Ploa$t zQhg|2sK;%Eb!By`)j9G1w?>`Wt6IK3gB}~uoue(MlRiIoZ#d{pgJZ8b{^{HO8)@%= zX)og3`*D5v1g;*Lz8@Sm(Q|&}PUytlb@Q_dzKFOzKK!Z_&?GO4+JO-)iPH=fs{(`& zZ9{oNn~LUZaeN!>i9p*0N^sHye8nw4xSi!REaP@@^Jy66|)Y9_AFoLlrlkg(42 zVq2J??I(+1*BcSKsTyO7LCho{8tVQm1b>*GQ*H~Mn71Lhy`alw%;D@CU^0)5Ng{cHz@LS7QZ o8uGHYt7)tmZjae5ge5$b`e_;HIklOseoIbqeod19BU-8d00{dbSpWb4 literal 0 HcmV?d00001 diff --git a/docs/index.html b/docs/index.html index 23e1202d..51987387 100644 --- a/docs/index.html +++ b/docs/index.html @@ -8,6 +8,9 @@ + + + @@ -19,7 +22,13 @@ SWCompression Docs - (100% documented) + (93% documented) +

    + +

    +

    + +

    @@ -121,6 +130,9 @@

    + @@ -330,7 +342,7 @@ so some difference in speed is expected.

  • diff --git a/docs/js/jazzy.js b/docs/js/jazzy.js index e2b491dc..009c80d3 100755 --- a/docs/js/jazzy.js +++ b/docs/js/jazzy.js @@ -35,3 +35,9 @@ $(".token").click(function(event) { } event.preventDefault(); }); + +// Dumb down quotes within code blocks that delimit strings instead of quotations +// https://github.com/realm/jazzy/issues/714 +$("code q").replaceWith(function () { + return ["\"", $(this).contents(), "\""]; +}); diff --git a/docs/js/jazzy.search.js b/docs/js/jazzy.search.js new file mode 100644 index 00000000..54be83cf --- /dev/null +++ b/docs/js/jazzy.search.js @@ -0,0 +1,62 @@ +$(function(){ + var searchIndex = lunr(function() { + this.ref('url'); + this.field('name'); + }); + + 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) { + $.each(searchData, function (url, doc) { + searchIndex.add({url: url, name: doc.name}); + }); + + $typeahead.typeahead( + { + highlight: true, + minLength: 3 + }, + { + limit: 10, + display: displayTemplate, + templates: { suggestion: suggestionTemplate }, + source: function(query, sync) { + var results = searchIndex.search(query).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/docs/js/lunr.min.js b/docs/js/lunr.min.js new file mode 100755 index 00000000..22776bb8 --- /dev/null +++ b/docs/js/lunr.min.js @@ -0,0 +1,6 @@ +/** + * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 0.7.2 + * Copyright (C) 2016 Oliver Nightingale + * @license MIT + */ +!function(){var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.7.2",t.utils={},t.utils.warn=function(t){return function(e){t.console&&console.warn&&console.warn(e)}}(this),t.utils.asString=function(t){return void 0===t||null===t?"":t.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var t=Array.prototype.slice.call(arguments),e=t.pop(),n=t;if("function"!=typeof e)throw new TypeError("last argument must be a function");n.forEach(function(t){this.hasHandler(t)||(this.events[t]=[]),this.events[t].push(e)},this)},t.EventEmitter.prototype.removeListener=function(t,e){if(this.hasHandler(t)){var n=this.events[t].indexOf(e);this.events[t].splice(n,1),this.events[t].length||delete this.events[t]}},t.EventEmitter.prototype.emit=function(t){if(this.hasHandler(t)){var e=Array.prototype.slice.call(arguments,1);this.events[t].forEach(function(t){t.apply(void 0,e)})}},t.EventEmitter.prototype.hasHandler=function(t){return t in this.events},t.tokenizer=function(e){if(!arguments.length||null==e||void 0==e)return[];if(Array.isArray(e))return e.map(function(e){return t.utils.asString(e).toLowerCase()});var n=t.tokenizer.seperator||t.tokenizer.separator;return e.toString().trim().toLowerCase().split(n)},t.tokenizer.seperator=!1,t.tokenizer.separator=/[\s\-]+/,t.tokenizer.load=function(t){var e=this.registeredFunctions[t];if(!e)throw new Error("Cannot load un-registered function: "+t);return e},t.tokenizer.label="default",t.tokenizer.registeredFunctions={"default":t.tokenizer},t.tokenizer.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing tokenizer: "+n),e.label=n,this.registeredFunctions[n]=e},t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.registeredFunctions[e];if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e);if(-1==i)throw new Error("Cannot find existingFn");i+=1,this._stack.splice(i,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e);if(-1==i)throw new Error("Cannot find existingFn");this._stack.splice(i,0,n)},t.Pipeline.prototype.remove=function(t){var e=this._stack.indexOf(t);-1!=e&&this._stack.splice(e,1)},t.Pipeline.prototype.run=function(t){for(var e=[],n=t.length,i=this._stack.length,r=0;n>r;r++){for(var o=t[r],s=0;i>s&&(o=this._stack[s](o,r,t),void 0!==o&&""!==o);s++);void 0!==o&&""!==o&&e.push(o)}return e},t.Pipeline.prototype.reset=function(){this._stack=[]},t.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Vector=function(){this._magnitude=null,this.list=void 0,this.length=0},t.Vector.Node=function(t,e,n){this.idx=t,this.val=e,this.next=n},t.Vector.prototype.insert=function(e,n){this._magnitude=void 0;var i=this.list;if(!i)return this.list=new t.Vector.Node(e,n,i),this.length++;if(en.idx?n=n.next:(i+=e.val*n.val,e=e.next,n=n.next);return i},t.Vector.prototype.similarity=function(t){return this.dot(t)/(this.magnitude()*t.magnitude())},t.SortedSet=function(){this.length=0,this.elements=[]},t.SortedSet.load=function(t){var e=new this;return e.elements=t,e.length=t.length,e},t.SortedSet.prototype.add=function(){var t,e;for(t=0;t1;){if(o===t)return r;t>o&&(e=r),o>t&&(n=r),i=n-e,r=e+Math.floor(i/2),o=this.elements[r]}return o===t?r:-1},t.SortedSet.prototype.locationFor=function(t){for(var e=0,n=this.elements.length,i=n-e,r=e+Math.floor(i/2),o=this.elements[r];i>1;)t>o&&(e=r),o>t&&(n=r),i=n-e,r=e+Math.floor(i/2),o=this.elements[r];return o>t?r:t>o?r+1:void 0},t.SortedSet.prototype.intersect=function(e){for(var n=new t.SortedSet,i=0,r=0,o=this.length,s=e.length,a=this.elements,h=e.elements;;){if(i>o-1||r>s-1)break;a[i]!==h[r]?a[i]h[r]&&r++:(n.add(a[i]),i++,r++)}return n},t.SortedSet.prototype.clone=function(){var e=new t.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},t.SortedSet.prototype.union=function(t){var e,n,i;this.length>=t.length?(e=this,n=t):(e=t,n=this),i=e.clone();for(var r=0,o=n.toArray();rp;p++)c[p]===a&&d++;h+=d/f*l.boost}}this.tokenStore.add(a,{ref:o,tf:h})}n&&this.eventEmitter.emit("add",e,this)},t.Index.prototype.remove=function(t,e){var n=t[this._ref],e=void 0===e?!0:e;if(this.documentStore.has(n)){var i=this.documentStore.get(n);this.documentStore.remove(n),i.forEach(function(t){this.tokenStore.remove(t,n)},this),e&&this.eventEmitter.emit("remove",t,this)}},t.Index.prototype.update=function(t,e){var e=void 0===e?!0:e;this.remove(t,!1),this.add(t,!1),e&&this.eventEmitter.emit("update",t,this)},t.Index.prototype.idf=function(t){var e="@"+t;if(Object.prototype.hasOwnProperty.call(this._idfCache,e))return this._idfCache[e];var n=this.tokenStore.count(t),i=1;return n>0&&(i=1+Math.log(this.documentStore.length/n)),this._idfCache[e]=i},t.Index.prototype.search=function(e){var n=this.pipeline.run(this.tokenizerFn(e)),i=new t.Vector,r=[],o=this._fields.reduce(function(t,e){return t+e.boost},0),s=n.some(function(t){return this.tokenStore.has(t)},this);if(!s)return[];n.forEach(function(e,n,s){var a=1/s.length*this._fields.length*o,h=this,u=this.tokenStore.expand(e).reduce(function(n,r){var o=h.corpusTokens.indexOf(r),s=h.idf(r),u=1,l=new t.SortedSet;if(r!==e){var c=Math.max(3,r.length-e.length);u=1/Math.log(c)}o>-1&&i.insert(o,a*s*u);for(var f=h.tokenStore.get(r),d=Object.keys(f),p=d.length,v=0;p>v;v++)l.add(f[d[v]].ref);return n.union(l)},new t.SortedSet);r.push(u)},this);var a=r.reduce(function(t,e){return t.intersect(e)});return a.map(function(t){return{ref:t,score:i.similarity(this.documentVector(t))}},this).sort(function(t,e){return e.score-t.score})},t.Index.prototype.documentVector=function(e){for(var n=this.documentStore.get(e),i=n.length,r=new t.Vector,o=0;i>o;o++){var s=n.elements[o],a=this.tokenStore.get(s)[e].tf,h=this.idf(s);r.insert(this.corpusTokens.indexOf(s),a*h)}return r},t.Index.prototype.toJSON=function(){return{version:t.version,fields:this._fields,ref:this._ref,tokenizer:this.tokenizerFn.label,documentStore:this.documentStore.toJSON(),tokenStore:this.tokenStore.toJSON(),corpusTokens:this.corpusTokens.toJSON(),pipeline:this.pipeline.toJSON()}},t.Index.prototype.use=function(t){var e=Array.prototype.slice.call(arguments,1);e.unshift(this),t.apply(this,e)},t.Store=function(){this.store={},this.length=0},t.Store.load=function(e){var n=new this;return n.length=e.length,n.store=Object.keys(e.store).reduce(function(n,i){return n[i]=t.SortedSet.load(e.store[i]),n},{}),n},t.Store.prototype.set=function(t,e){this.has(t)||this.length++,this.store[t]=e},t.Store.prototype.get=function(t){return this.store[t]},t.Store.prototype.has=function(t){return t in this.store},t.Store.prototype.remove=function(t){this.has(t)&&(delete this.store[t],this.length--)},t.Store.prototype.toJSON=function(){return{store:this.store,length:this.length}},t.stemmer=function(){var t={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},e={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",i="[aeiouy]",r=n+"[^aeiouy]*",o=i+"[aeiou]*",s="^("+r+")?"+o+r,a="^("+r+")?"+o+r+"("+o+")?$",h="^("+r+")?"+o+r+o+r,u="^("+r+")?"+i,l=new RegExp(s),c=new RegExp(h),f=new RegExp(a),d=new RegExp(u),p=/^(.+?)(ss|i)es$/,v=/^(.+?)([^s])s$/,g=/^(.+?)eed$/,m=/^(.+?)(ed|ing)$/,y=/.$/,S=/(at|bl|iz)$/,w=new RegExp("([^aeiouylsz])\\1$"),k=new RegExp("^"+r+i+"[^aeiouwxy]$"),x=/^(.+?[^aeiou])y$/,b=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,E=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,F=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,_=/^(.+?)(s|t)(ion)$/,z=/^(.+?)e$/,O=/ll$/,P=new RegExp("^"+r+i+"[^aeiouwxy]$"),T=function(n){var i,r,o,s,a,h,u;if(n.length<3)return n;if(o=n.substr(0,1),"y"==o&&(n=o.toUpperCase()+n.substr(1)),s=p,a=v,s.test(n)?n=n.replace(s,"$1$2"):a.test(n)&&(n=n.replace(a,"$1$2")),s=g,a=m,s.test(n)){var T=s.exec(n);s=l,s.test(T[1])&&(s=y,n=n.replace(s,""))}else if(a.test(n)){var T=a.exec(n);i=T[1],a=d,a.test(i)&&(n=i,a=S,h=w,u=k,a.test(n)?n+="e":h.test(n)?(s=y,n=n.replace(s,"")):u.test(n)&&(n+="e"))}if(s=x,s.test(n)){var T=s.exec(n);i=T[1],n=i+"i"}if(s=b,s.test(n)){var T=s.exec(n);i=T[1],r=T[2],s=l,s.test(i)&&(n=i+t[r])}if(s=E,s.test(n)){var T=s.exec(n);i=T[1],r=T[2],s=l,s.test(i)&&(n=i+e[r])}if(s=F,a=_,s.test(n)){var T=s.exec(n);i=T[1],s=c,s.test(i)&&(n=i)}else if(a.test(n)){var T=a.exec(n);i=T[1]+T[2],a=c,a.test(i)&&(n=i)}if(s=z,s.test(n)){var T=s.exec(n);i=T[1],s=c,a=f,h=P,(s.test(i)||a.test(i)&&!h.test(i))&&(n=i)}return s=O,a=c,s.test(n)&&a.test(n)&&(s=y,n=n.replace(s,"")),"y"==o&&(n=o.toLowerCase()+n.substr(1)),n};return T}(),t.Pipeline.registerFunction(t.stemmer,"stemmer"),t.generateStopWordFilter=function(t){var e=t.reduce(function(t,e){return t[e]=e,t},{});return function(t){return t&&e[t]!==t?t:void 0}},t.stopWordFilter=t.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter"),t.trimmer=function(t){return t.replace(/^\W+/,"").replace(/\W+$/,"")},t.Pipeline.registerFunction(t.trimmer,"trimmer"),t.TokenStore=function(){this.root={docs:{}},this.length=0},t.TokenStore.load=function(t){var e=new this;return e.root=t.root,e.length=t.length,e},t.TokenStore.prototype.add=function(t,e,n){var n=n||this.root,i=t.charAt(0),r=t.slice(1);return i in n||(n[i]={docs:{}}),0===r.length?(n[i].docs[e.ref]=e,void(this.length+=1)):this.add(r,e,n[i])},t.TokenStore.prototype.has=function(t){if(!t)return!1;for(var e=this.root,n=0;n', + 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; + $e = $.Event(namespace + type); + (args = args || []).unshift($e); + this.$el.trigger.apply(this.$el, 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 + }; + 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); + 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 getRegex(patterns, caseSensitive, wordsOnly) { + var escapedPatterns = [], regexStr; + for (var i = 0, len = patterns.length; i < len; i++) { + escapedPatterns.push(_.escapeRegExChars(patterns[i])); + } + 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) { + o = o || {}; + if (!o.input) { + $.error("input is missing"); + } + www.mixin(this); + this.$hint = $(o.hint); + this.$input = $(o.input); + 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; + } + } + 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); + } + }, + 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 = $("
    "); + } + }); + 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 = { + 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 = 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).addClass(this.classes.dataset).addClass(this.classes.dataset + "-" + this.name); + } + Dataset.extractData = function extractData(el) { + var $el = $(el); + if ($el.data(keys.obj)) { + return { + 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", this.name, suggestions, false); + }, + _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", this.name, suggestions, true); + }, + _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.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); + }; + 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); + } + } + function async(suggestions) { + suggestions = suggestions || []; + if (!canceled && rendered < that.limit) { + that.cancel = $.noop; + rendered += suggestions.length; + that._append(query, suggestions.slice(0, that.limit - rendered)); + that.async && that.trigger("asyncReceived", query); + } + } + }, + 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 || suggestionTemplate + }; + function suggestionTemplate(context) { + return $("
    ").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, isDatasetEmpty); + function isDatasetEmpty(dataset) { + return dataset.isEmpty(); + } + }, + _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); + _.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.addClass(this.classes.open); + }, + close: function close() { + 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 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.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, dataset, suggestions, async) { + this._updateHint(); + 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()) { + this.select($selectable) && $e.preventDefault(); + } + }, + _onTabKeyed: function onTabKeyed(type, $e) { + var $selectable; + if ($selectable = this.menu.getActiveSelectable()) { + this.select($selectable) && $e.preventDefault(); + } else 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.getTopSelectable()); + } + }, + _onRightKeyed: function onRightKeyed() { + if (this.dir === "ltr" && this.input.isCursorAtEnd()) { + this.autocomplete(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.menu.open(); + this._updateHint(); + this.eventBus.trigger("open"); + } + return this.isOpen(); + }, + close: function close() { + if (this.isOpen() && !this.eventBus.before("close")) { + 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)) { + this.input.setQuery(data.val, true); + this.eventBus.trigger("select", data.obj); + 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)) { + this.input.setQuery(data.val); + this.eventBus.trigger("autocomplete", data.obj); + return true; + } + return false; + }, + moveCursor: function moveCursor(delta) { + var query, $candidate, data, payload, cancelMove; + query = this.input.getQuery(); + $candidate = this.menu.selectableRelativeToCursor(delta); + data = this.menu.getSelectableData($candidate); + payload = data ? data.obj : null; + cancelMove = this._minLengthMet() && this.menu.update(query); + if (!cancelMove && !this.eventBus.before("cursorchange", payload)) { + this.menu.setCursor($candidate); + if (data) { + this.input.setInputValue(data.val); + } else { + this.input.resetInputValue(); + this._updateHint(); + } + this.eventBus.trigger("cursorchange", payload); + 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, 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 + }, www); + menu = new MenuConstructor({ + node: $menu, + datasets: datasets + }, www); + typeahead = new Typeahead({ + input: input, + menu: menu, + eventBus: eventBus, + minLength: o.minLength + }, 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(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).removeAttr("id name placeholder required").attr({ + autocomplete: "off", + 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({ + autocomplete: "off", + 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/docs/search.json b/docs/search.json new file mode 100644 index 00000000..6c9f1b12 --- /dev/null +++ b/docs/search.json @@ -0,0 +1 @@ +{"Structs/ZlibHeader/CompressionLevel.html#/s:FOV13SWCompression10ZlibHeader16CompressionLevel16fastestAlgorithmFMS1_S1_":{"name":"fastestAlgorithm","abstract":"

    Fastest algorithm.

    ","parent_name":"CompressionLevel"},"Structs/ZlibHeader/CompressionLevel.html#/s:FOV13SWCompression10ZlibHeader16CompressionLevel13fastAlgorithmFMS1_S1_":{"name":"fastAlgorithm","abstract":"

    Fast algorithm.

    ","parent_name":"CompressionLevel"},"Structs/ZlibHeader/CompressionLevel.html#/s:FOV13SWCompression10ZlibHeader16CompressionLevel16defaultAlgorithmFMS1_S1_":{"name":"defaultAlgorithm","abstract":"

    Default algorithm.

    ","parent_name":"CompressionLevel"},"Structs/ZlibHeader/CompressionLevel.html#/s:FOV13SWCompression10ZlibHeader16CompressionLevel13slowAlgorithmFMS1_S1_":{"name":"slowAlgorithm","abstract":"

    Slowest algorithm but with maximum compression.

    ","parent_name":"CompressionLevel"},"Structs/ZlibHeader/CompressionMethod.html#/s:FOV13SWCompression10ZlibHeader17CompressionMethod7deflateFMS1_S1_":{"name":"deflate","abstract":"

    The only one supported compression method (Deflate).

    ","parent_name":"CompressionMethod"},"Structs/ZlibHeader/CompressionMethod.html":{"name":"CompressionMethod","abstract":"

    Supported compression methods in zlib archive.

    ","parent_name":"ZlibHeader"},"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:vV13SWCompression10ZlibHeader17compressionMethodOS0_17CompressionMethod":{"name":"compressionMethod","abstract":"

    Compression method of archive. Always equals to .deflate.

    ","parent_name":"ZlibHeader"},"Structs/ZlibHeader.html#/s:vV13SWCompression10ZlibHeader16compressionLevelOS0_16CompressionLevel":{"name":"compressionLevel","abstract":"

    Level of compression in the archive.

    ","parent_name":"ZlibHeader"},"Structs/ZlibHeader.html#/s:vV13SWCompression10ZlibHeader10windowSizeSi":{"name":"windowSize","abstract":"

    Size of ‘window’: moving interval of data which was used to make the archive

    ","parent_name":"ZlibHeader"},"Structs/ZlibHeader.html#/s:FV13SWCompression10ZlibHeadercFzT11archiveDataV10Foundation4Data_S0_":{"name":"init(archiveData:)","abstract":"

    Initializes the structure with the values from zlib archive presented in archiveData.

    ","parent_name":"ZlibHeader"},"Structs/ZipEntry.html#/s:vV13SWCompression8ZipEntry8fileNameGSqSS_":{"name":"fileName","abstract":"Undocumented","parent_name":"ZipEntry"},"Structs/ZipEntry.html#/s:vV13SWCompression8ZipEntry11fileCommentGSqSS_":{"name":"fileComment","abstract":"Undocumented","parent_name":"ZipEntry"},"Structs/ZipEntry.html#/s:vV13SWCompression8ZipEntry14fileAttributesVs6UInt32":{"name":"fileAttributes","abstract":"Undocumented","parent_name":"ZipEntry"},"Structs/GzipHeader/FileSystemType.html#/s:FOV13SWCompression10GzipHeader14FileSystemType4unixFMS1_S1_":{"name":"unix","abstract":"

    One of many Linux systems. (It seems like modern macOS systems also fall into this category).

    ","parent_name":"FileSystemType"},"Structs/GzipHeader/FileSystemType.html#/s:FOV13SWCompression10GzipHeader14FileSystemType9macintoshFMS1_S1_":{"name":"macintosh","abstract":"

    Older Macintosh (Mac OS, OS X) systems.

    ","parent_name":"FileSystemType"},"Structs/GzipHeader/FileSystemType.html#/s:FOV13SWCompression10GzipHeader14FileSystemType4ntfsFMS1_S1_":{"name":"ntfs","abstract":"

    File system used in Microsoft™®© Windows™®©.

    ","parent_name":"FileSystemType"},"Structs/GzipHeader/FileSystemType.html#/s:FOV13SWCompression10GzipHeader14FileSystemType7unknownFMS1_S1_":{"name":"unknown","abstract":"

    File system was unknown to the archiver.

    ","parent_name":"FileSystemType"},"Structs/GzipHeader/FileSystemType.html#/s:FOV13SWCompression10GzipHeader14FileSystemType5otherFMS1_S1_":{"name":"other","abstract":"

    File system was one of the rare systems..

    ","parent_name":"FileSystemType"},"Structs/GzipHeader/CompressionMethod.html#/s:FOV13SWCompression10GzipHeader17CompressionMethod7deflateFMS1_S1_":{"name":"deflate","abstract":"

    The only one supported compression method (Deflate).

    ","parent_name":"CompressionMethod"},"Structs/GzipHeader/CompressionMethod.html":{"name":"CompressionMethod","abstract":"

    Supported compression methods in gzip archive.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader/FileSystemType.html":{"name":"FileSystemType","abstract":"

    Type of file system on which gzip archive was created.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:vV13SWCompression10GzipHeader17compressionMethodOS0_17CompressionMethod":{"name":"compressionMethod","abstract":"

    Compression method of archive. Always equals to .deflate.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:vV13SWCompression10GzipHeader16modificationTimeV10Foundation4Date":{"name":"modificationTime","abstract":"

    The most recent modification time of the original file.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:vV13SWCompression10GzipHeader6osTypeOS0_14FileSystemType":{"name":"osType","abstract":"

    Type of file system on which compression took place.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:vV13SWCompression10GzipHeader16originalFileNameGSqSS_":{"name":"originalFileName","abstract":"

    Name of the original file.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:vV13SWCompression10GzipHeader7commentGSqSS_":{"name":"comment","abstract":"

    Comment inside the archive.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html#/s:FV13SWCompression10GzipHeadercFzT11archiveDataV10Foundation4Data_S0_":{"name":"init(archiveData:)","abstract":"

    Initializes the structure with the values of first ‘member’ in gzip archive presented in archiveData.

    ","parent_name":"GzipHeader"},"Structs/GzipHeader.html":{"name":"GzipHeader","abstract":"

    A structure which provides information about gzip archive.

    "},"Structs/ZipEntry.html":{"name":"ZipEntry","abstract":"Undocumented"},"Structs/ZlibHeader.html":{"name":"ZlibHeader","abstract":"

    A structure which provides information about zlib archive.

    "},"Protocols/DecompressionAlgorithm.html#/s:ZFP13SWCompression22DecompressionAlgorithm10decompressFzT14compressedDataV10Foundation4Data_S2_":{"name":"decompress(compressedData:)","abstract":"

    Abstract decompress function.

    ","parent_name":"DecompressionAlgorithm"},"Protocols/Archive.html#/s:ZFP13SWCompression7Archive9unarchiveFzT11archiveDataV10Foundation4Data_S2_":{"name":"unarchive(archiveData:)","abstract":"

    Abstract unarchive function.

    ","parent_name":"Archive"},"Protocols/Archive.html":{"name":"Archive","abstract":"

    Abstract archive class which supports unarchiving.

    "},"Protocols/DecompressionAlgorithm.html":{"name":"DecompressionAlgorithm","abstract":"

    Abstract decompression algorithm class which supports decompression.

    "},"Enums/XZError.html#/s:FO13SWCompression7XZError10WrongMagicFMS0_S0_":{"name":"WrongMagic","abstract":"

    Either magic number in header or footer was not equal to predefined value.

    ","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError16WrongArchiveInfoFMS0_S0_":{"name":"WrongArchiveInfo","abstract":"

    One of special fields of archive had an incorrect value.

    ","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError18FieldReservedValueFMS0_S0_":{"name":"FieldReservedValue","abstract":"

    One of special fields of archive had a reserved value.

    ","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError12WrongInfoCRCFMS0_S0_":{"name":"WrongInfoCRC","abstract":"

    Checksum of one of special fields of archive was incorrect.

    ","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError13WrongFilterIDFMS0_S0_":{"name":"WrongFilterID","abstract":"

    ID of filter(s) used in archvie was unsupported.

    ","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError15CheckTypeSHA256FMS0_S0_":{"name":"CheckTypeSHA256","abstract":"

    Type of checksum of archive was SHA-256.

    ","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError13WrongDataSizeFMS0_S0_":{"name":"WrongDataSize","abstract":"

    Either size of decompressed data was not equal to specified one in block header or","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError10WrongCheckFMS0_FV10Foundation4DataS0_":{"name":"WrongCheck","abstract":"

    Computed checksum of uncompressed data didn’t match the value stored in the archive.","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError12WrongPaddingFMS0_S0_":{"name":"WrongPadding","abstract":"

    Unsupported padding of a structure in the archive.

    ","parent_name":"XZError"},"Enums/XZError.html#/s:FO13SWCompression7XZError21MultiByteIntegerErrorFMS0_S0_":{"name":"MultiByteIntegerError","abstract":"

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

    ","parent_name":"XZError"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error10WrongMagicFMS0_S0_":{"name":"WrongMagic","abstract":"

    Magic number was not 0x425a.

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error22WrongCompressionMethodFMS0_S0_":{"name":"WrongCompressionMethod","abstract":"

    Compression method was not type ‘h’ (not Huffman).

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error14WrongBlockSizeFMS0_S0_":{"name":"WrongBlockSize","abstract":"

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

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error14WrongBlockTypeFMS0_S0_":{"name":"WrongBlockType","abstract":"

    Unknown block type (was neither ‘pi’ nor ‘sqrt(pi)’).

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error15RandomizedBlockFMS0_S0_":{"name":"RandomizedBlock","abstract":"

    Block is randomized.

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error18WrongHuffmanGroupsFMS0_S0_":{"name":"WrongHuffmanGroups","abstract":"

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

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error13WrongSelectorFMS0_S0_":{"name":"WrongSelector","abstract":"

    Selector was greater than total number of Huffman tables/groups.

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error22WrongHuffmanLengthCodeFMS0_S0_":{"name":"WrongHuffmanLengthCode","abstract":"

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

    ","parent_name":"BZip2Error"},"Enums/BZip2Error.html#/s:FO13SWCompression10BZip2Error14SymbolNotFoundFMS0_S0_":{"name":"SymbolNotFound","abstract":"

    Symbol was not found in Huffman tree.

    ","parent_name":"BZip2Error"},"Enums/DeflateError.html#/s:FO13SWCompression12DeflateError29WrongUncompressedBlockLengthsFMS0_S0_":{"name":"WrongUncompressedBlockLengths","abstract":"

    Uncompressed block’ length and nlength bytes were not compatible.

    ","parent_name":"DeflateError"},"Enums/DeflateError.html#/s:FO13SWCompression12DeflateError14WrongBlockTypeFMS0_S0_":{"name":"WrongBlockType","abstract":"

    Unknown block type (not from 0 to 2).

    ","parent_name":"DeflateError"},"Enums/DeflateError.html#/s:FO13SWCompression12DeflateError11WrongSymbolFMS0_S0_":{"name":"WrongSymbol","abstract":"

    Decoded symbol was found in Huffman tree but is unknown.

    ","parent_name":"DeflateError"},"Enums/DeflateError.html#/s:FO13SWCompression12DeflateError14SymbolNotFoundFMS0_S0_":{"name":"SymbolNotFound","abstract":"

    Symbol was not found in Huffman tree.

    ","parent_name":"DeflateError"},"Enums/ZlibError.html#/s:FO13SWCompression9ZlibError22WrongCompressionMethodFMS0_S0_":{"name":"WrongCompressionMethod","abstract":"

    Compression method was other than 8 which is the only supported one.

    ","parent_name":"ZlibError"},"Enums/ZlibError.html#/s:FO13SWCompression9ZlibError20WrongCompressionInfoFMS0_S0_":{"name":"WrongCompressionInfo","abstract":"

    Compression info was greater than 7 which is uncompatible number 8 compression method.

    ","parent_name":"ZlibError"},"Enums/ZlibError.html#/s:FO13SWCompression9ZlibError11WrongFcheckFMS0_S0_":{"name":"WrongFcheck","abstract":"

    First two bytes were inconsistent with each other.

    ","parent_name":"ZlibError"},"Enums/ZlibError.html#/s:FO13SWCompression9ZlibError21WrongCompressionLevelFMS0_S0_":{"name":"WrongCompressionLevel","abstract":"

    Compression level was other than 0, 1, 2, 3.

    ","parent_name":"ZlibError"},"Enums/ZlibError.html#/s:FO13SWCompression9ZlibError12WrongAdler32FMS0_FV10Foundation4DataS0_":{"name":"WrongAdler32","abstract":"

    Computed Adler-32 sum of uncompressed data didn’t match the value stored in the archive.","parent_name":"ZlibError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError15WrongPropertiesFMS0_S0_":{"name":"WrongProperties","abstract":"

    Properties byte was greater than 225.

    ","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError21RangeDecoderInitErrorFMS0_S0_":{"name":"RangeDecoderInitError","abstract":"

    Unable to initialize RanderDecorer.

    ","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError24ExceededUncompressedSizeFMS0_S0_":{"name":"ExceededUncompressedSize","abstract":"

    The number of uncompressed bytes hit limit in the middle of decoding.

    ","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError13WindowIsEmptyFMS0_S0_":{"name":"WindowIsEmpty","abstract":"

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

    ","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError23RangeDecoderFinishErrorFMS0_S0_":{"name":"RangeDecoderFinishError","abstract":"

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

    ","parent_name":"LZMAError"},"Enums/LZMAError.html#/s:FO13SWCompression9LZMAError16RepeatWillExceedFMS0_S0_":{"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:FO13SWCompression9LZMAError17NotEnoughToRepeatFMS0_S0_":{"name":"NotEnoughToRepeat","abstract":"

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

    ","parent_name":"LZMAError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError27NotFoundCentralDirectoryEndFMS0_S0_":{"name":"NotFoundCentralDirectoryEnd","abstract":"

    End of Central Directoty record was not found.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError14WrongSignatureFMS0_S0_":{"name":"WrongSignature","abstract":"

    Wrong signature of one of ZIP container’s structures.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError9WrongSizeFMS0_S0_":{"name":"WrongSize","abstract":"

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

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError12WrongVersionFMS0_S0_":{"name":"WrongVersion","abstract":"

    Wrong number of version needed to extract ZIP container.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError24MultiVolumesNotSupportedFMS0_S0_":{"name":"MultiVolumesNotSupported","abstract":"

    Archive either spanned or consists of several volumes. This feature is not supported.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError22EncryptionNotSupportedFMS0_S0_":{"name":"EncryptionNotSupported","abstract":"

    Entry or record is encrypted. This feature is not supported.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError20PatchingNotSupportedFMS0_S0_":{"name":"PatchingNotSupported","abstract":"

    Entry contains patched data. This feature is not supported.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError23CompressionNotSupportedFMS0_S0_":{"name":"CompressionNotSupported","abstract":"

    Wrong compression method of an entry.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError16WrongLocalHeaderFMS0_S0_":{"name":"WrongLocalHeader","abstract":"

    Wrong local header of an entry.

    ","parent_name":"ZipError"},"Enums/ZipError.html#/s:FO13SWCompression8ZipError10WrongCRC32FMS0_S0_":{"name":"WrongCRC32","abstract":"

    Wrong computed CRC32 of an entry.

    ","parent_name":"ZipError"},"Enums/GzipError.html#/s:FO13SWCompression9GzipError10WrongMagicFMS0_S0_":{"name":"WrongMagic","abstract":"

    First two bytes of archive were not 31 and 139.

    ","parent_name":"GzipError"},"Enums/GzipError.html#/s:FO13SWCompression9GzipError22WrongCompressionMethodFMS0_S0_":{"name":"WrongCompressionMethod","abstract":"

    Compression method was other than 8 which is the only supported one.

    ","parent_name":"GzipError"},"Enums/GzipError.html#/s:FO13SWCompression9GzipError10WrongFlagsFMS0_S0_":{"name":"WrongFlags","abstract":"

    Reserved flags bits were not equal to 0.

    ","parent_name":"GzipError"},"Enums/GzipError.html#/s:FO13SWCompression9GzipError14WrongHeaderCRCFMS0_S0_":{"name":"WrongHeaderCRC","abstract":"

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

    ","parent_name":"GzipError"},"Enums/GzipError.html#/s:FO13SWCompression9GzipError8WrongCRCFMS0_FV10Foundation4DataS0_":{"name":"WrongCRC","abstract":"

    Computed CRC of uncompressed data didn’t match the value stored in the archive.","parent_name":"GzipError"},"Enums/GzipError.html#/s:FO13SWCompression9GzipError10WrongISizeFMS0_S0_":{"name":"WrongISize","abstract":"

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

    ","parent_name":"GzipError"},"Enums/LZMA2Error.html#/s:FO13SWCompression10LZMA2Error15WrongPropertiesFMS0_S0_":{"name":"WrongProperties","abstract":"

    Reserved bits of LZMA2 properties byte were not equal to zero.

    ","parent_name":"LZMA2Error"},"Enums/LZMA2Error.html#/s:FO13SWCompression10LZMA2Error19WrongDictionarySizeFMS0_S0_":{"name":"WrongDictionarySize","abstract":"

    Dictionary size was too big.

    ","parent_name":"LZMA2Error"},"Enums/LZMA2Error.html#/s:FO13SWCompression10LZMA2Error16WrongControlByteFMS0_S0_":{"name":"WrongControlByte","abstract":"

    Unknown conrol byte value of LZMA2 packet.

    ","parent_name":"LZMA2Error"},"Enums/LZMA2Error.html#/s:FO13SWCompression10LZMA2Error10WrongResetFMS0_S0_":{"name":"WrongReset","abstract":"

    Unknown reset instruction encounetered in LZMA2 packet.

    ","parent_name":"LZMA2Error"},"Enums/LZMA2Error.html#/s:FO13SWCompression10LZMA2Error10WrongSizesFMS0_S0_":{"name":"WrongSizes","abstract":"

    Either size of decompressed data was not equal to specified one in LZMA2 packet or","parent_name":"LZMA2Error"},"Enums/LZMA2Error.html":{"name":"LZMA2Error","abstract":"

    Error happened during LZMA2 decompression."},"Enums/GzipError.html":{"name":"GzipError","abstract":"

    Error happened during unarchiving gzip archive."},"Enums/ZipError.html":{"name":"ZipError","abstract":"

    Error happened during processing ZIP archive (container)."},"Enums/LZMAError.html":{"name":"LZMAError","abstract":"

    Error happened during LZMA decompression."},"Enums/ZlibError.html":{"name":"ZlibError","abstract":"

    Error happened during unarchiving Zlib archive."},"Enums/DeflateError.html":{"name":"DeflateError","abstract":"

    Error happened during deflate decompression."},"Enums/BZip2Error.html":{"name":"BZip2Error","abstract":"

    Error happened during bzip2 decompression."},"Enums/XZError.html":{"name":"XZError","abstract":"

    Error happened during unarchiving XZ archive."},"Classes/XZArchive.html#/s:ZFC13SWCompression9XZArchive9unarchiveFzT11archiveDataV10Foundation4Data_S2_":{"name":"unarchive(archiveData:)","abstract":"

    Unarchives xz archive stored in archiveData.

    ","parent_name":"XZArchive"},"Classes/BZip2.html#/s:ZFC13SWCompression5BZip210decompressFzT14compressedDataV10Foundation4Data_S2_":{"name":"decompress(compressedData:)","abstract":"

    Decompresses compressedData with BZip2 algortihm.

    ","parent_name":"BZip2"},"Classes/Deflate.html#/s:ZFC13SWCompression7Deflate10decompressFzT14compressedDataV10Foundation4Data_S2_":{"name":"decompress(compressedData:)","abstract":"

    Decompresses compressedData with DEFLATE algortihm.

    ","parent_name":"Deflate"},"Classes/Deflate.html#/s:ZFC13SWCompression7Deflate8compressFzT4dataV10Foundation4Data_S2_":{"name":"compress(data:)","abstract":"Undocumented","parent_name":"Deflate"},"Classes/ZlibArchive.html#/s:ZFC13SWCompression11ZlibArchive9unarchiveFzT11archiveDataV10Foundation4Data_S2_":{"name":"unarchive(archiveData:)","abstract":"

    Unarchives Zlib archive stored in archiveData.

    ","parent_name":"ZlibArchive"},"Classes/LZMA.html#/s:ZFC13SWCompression4LZMA10decompressFzT14compressedDataV10Foundation4Data_S2_":{"name":"decompress(compressedData:)","abstract":"

    Decompresses compressedData with LZMA algortihm.

    ","parent_name":"LZMA"},"Classes/ZipContainer.html#/s:vC13SWCompression12ZipContainer7entriesGSaVS_8ZipEntry_":{"name":"entries","abstract":"Undocumented","parent_name":"ZipContainer"},"Classes/ZipContainer.html#/s:FC13SWCompression12ZipContainercFzT13containerDataV10Foundation4Data_S0_":{"name":"init(containerData:)","abstract":"Undocumented","parent_name":"ZipContainer"},"Classes/ZipContainer.html#/s:FC13SWCompression12ZipContainer4dataFzT3forVS_8ZipEntry_V10Foundation4Data":{"name":"data(for:)","abstract":"Undocumented","parent_name":"ZipContainer"},"Classes/ZipContainer.html#/s:ZFC13SWCompression12ZipContainer4openFzT13containerDataV10Foundation4Data_GSaT9entryNameSS9entryDataS2___":{"name":"open(containerData:)","abstract":"

    Processes ZIP archive (container) and returns an array of tuples (String, Data).","parent_name":"ZipContainer"},"Classes/GzipArchive.html#/s:ZFC13SWCompression11GzipArchive9unarchiveFzT11archiveDataV10Foundation4Data_S2_":{"name":"unarchive(archiveData:)","abstract":"

    Unarchives gzip archive stored in archiveData.

    ","parent_name":"GzipArchive"},"Classes/LZMA2.html#/s:ZFC13SWCompression5LZMA210decompressFzT14compressedDataV10Foundation4Data_S2_":{"name":"decompress(compressedData:)","abstract":"

    Decompresses compressedData with LZMA2 algortihm. LZMA2 is a modification of LZMA.

    ","parent_name":"LZMA2"},"Classes/LZMA2.html":{"name":"LZMA2","abstract":"

    Provides function to decompress data, which were compressed with LZMA2

    "},"Classes/GzipArchive.html":{"name":"GzipArchive","abstract":"

    Provides unarchive function for GZip archives.

    "},"Classes/ZipContainer.html":{"name":"ZipContainer","abstract":"

    Provides function to open ZIP archives (containers).

    "},"Classes/LZMA.html":{"name":"LZMA","abstract":"

    Provides function to decompress data, which were compressed with LZMA

    "},"Classes/ZlibArchive.html":{"name":"ZlibArchive","abstract":"

    Provides unarchive function for Zlib archives.

    "},"Classes/Deflate.html":{"name":"Deflate","abstract":"

    Provides function to decompress data, which were compressed with DEFLATE.

    "},"Classes/BZip2.html":{"name":"BZip2","abstract":"

    Provides function to decompress data, which were compressed using BZip2.

    "},"Classes/XZArchive.html":{"name":"XZArchive","abstract":"

    Provides unarchive function for XZ archives.

    "},"Classes.html":{"name":"Classes","abstract":"The following classes are available globally."},"Enums.html":{"name":"Enums","abstract":"The following enums are available globally."},"Protocols.html":{"name":"Protocols","abstract":"The following protocols are available globally."},"Structs.html":{"name":"Structs","abstract":"The following structs are available globally."}} \ No newline at end of file diff --git a/docs/undocumented.json b/docs/undocumented.json index 1862018e..704c4204 100644 --- a/docs/undocumented.json +++ b/docs/undocumented.json @@ -1,6 +1,61 @@ { "warnings": [ - + { + "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/Deflate.swift", + "line": 228, + "symbol": "Deflate.compress(data:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/ZipContainer.swift", + "line": 50, + "symbol": "ZipEntry", + "symbol_kind": "source.lang.swift.decl.struct", + "warning": "undocumented" + }, + { + "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/ZipContainer.swift", + "line": 54, + "symbol": "ZipEntry.fileName", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/ZipContainer.swift", + "line": 58, + "symbol": "ZipEntry.fileComment", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/ZipContainer.swift", + "line": 62, + "symbol": "ZipEntry.fileAttributes", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/ZipContainer.swift", + "line": 77, + "symbol": "ZipContainer.entries", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/ZipContainer.swift", + "line": 79, + "symbol": "ZipContainer.init(containerData:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/timofeysolomko/Developer/SWCompression/Sources/ZipContainer.swift", + "line": 110, + "symbol": "ZipContainer.data(for:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + } ], "source_directory": "/Users/timofeysolomko/Developer/SWCompression" } \ No newline at end of file