added iOS source code
[wl-app.git] / iOS / Pods / FolioReaderKit / Source / EPUBCore / MediaType.swift
diff --git a/iOS/Pods/FolioReaderKit/Source/EPUBCore/MediaType.swift b/iOS/Pods/FolioReaderKit/Source/EPUBCore/MediaType.swift
new file mode 100755 (executable)
index 0000000..2e368ac
--- /dev/null
@@ -0,0 +1,122 @@
+//
+//  MediaType.swift
+//  FolioReaderKit
+//
+//  Created by Heberti Almeida on 29/04/15.
+//  Copyright (c) 2015 Folio Reader. All rights reserved.
+//
+
+import UIKit
+
+/**
+ MediaType is used to tell the type of content a resource is.
+
+ Examples of mediatypes are image/gif, text/css and application/xhtml+xml
+ */
+public struct MediaType: Equatable {
+    public let name: String
+    public let defaultExtension: String
+    public let extensions: [String]
+
+    public init(name: String, defaultExtension: String, extensions: [String] = []) {
+        self.name = name
+        self.defaultExtension = defaultExtension
+        self.extensions = extensions
+    }
+
+}
+
+// MARK: - Equatable
+
+public func == (lhs: MediaType, rhs: MediaType) -> Bool {
+    guard lhs.name == rhs.name else { return false }
+    guard lhs.defaultExtension == rhs.defaultExtension else { return false }
+    guard lhs.extensions == rhs.extensions else { return false }
+    return true
+}
+
+
+/**
+ Manages mediatypes that are used by epubs.
+ */
+extension MediaType {
+    static let xhtml = MediaType(name: "application/xhtml+xml", defaultExtension: "xhtml", extensions: ["htm", "html", "xhtml", "xml"])
+    static let epub = MediaType(name: "application/epub+zip", defaultExtension: "epub")
+    static let ncx = MediaType(name: "application/x-dtbncx+xml", defaultExtension: "ncx")
+    static let opf = MediaType(name: "application/oebps-package+xml", defaultExtension: "opf")
+    static let javaScript = MediaType(name: "text/javascript", defaultExtension: "js")
+    static let css = MediaType(name: "text/css", defaultExtension: "css")
+
+    // images
+    static let jpg = MediaType(name: "image/jpeg", defaultExtension: "jpg", extensions: ["jpg", "jpeg"])
+    static let png = MediaType(name: "image/png", defaultExtension: "png")
+    static let gif = MediaType(name: "image/gif", defaultExtension: "gif")
+    static let svg = MediaType(name: "image/svg+xml", defaultExtension: "svg")
+
+    // fonts
+    static let ttf = MediaType(name: "application/x-font-ttf", defaultExtension: "ttf")
+    static let ttf1 = MediaType(name: "application/x-font-truetype", defaultExtension: "ttf")
+    static let ttf2 = MediaType(name: "application/x-truetype-font", defaultExtension: "ttf")
+    static let openType = MediaType(name: "application/vnd.ms-opentype", defaultExtension: "otf")
+    static let woff = MediaType(name: "application/font-woff", defaultExtension: "woff")
+
+    // audio
+    static let mp3 = MediaType(name: "audio/mpeg", defaultExtension: "mp3")
+    static let mp4 = MediaType(name: "audio/mp4", defaultExtension: "mp4")
+    static let ogg = MediaType(name: "audio/ogg", defaultExtension: "ogg")
+
+    static let smil = MediaType(name: "application/smil+xml", defaultExtension: "smil")
+    static let xpgt = MediaType(name: "application/adobe-page-template+xml", defaultExtension: "xpgt")
+    static let pls = MediaType(name: "application/pls+xml", defaultExtension: "pls")
+
+    static let mediatypes = [xhtml, epub, ncx, opf, jpg, png, gif, javaScript, css, svg, ttf, ttf1, ttf2, openType, woff, mp3, mp4, ogg, smil, xpgt, pls]
+
+    /**
+     Gets the MediaType based on the file mimetype.
+     - parameter name:     The mediaType name
+     - parameter fileName: The file name to extract the extension
+     - returns: A know mediatype or create a new one.
+     */
+    static func by(name: String, fileName: String?) -> MediaType {
+        for mediatype in mediatypes {
+            if mediatype.name == name {
+                return mediatype
+            }
+        }
+        let ext = fileName?.pathExtension ?? ""
+        return MediaType(name: name, defaultExtension: ext)
+    }
+
+    /**
+     Gets the MediaType based on the file extension.
+     */
+    static func by(fileName: String) -> MediaType? {
+        let ext = "." + (fileName as NSString).pathExtension
+        return mediatypes.filter({ $0.extensions.contains(ext) }).first
+    }
+
+    /**
+     Compare if the resource is a image.
+     - returns: `true` if is a image and `false` if not
+     */
+    static func isBitmapImage(_ mediaType: MediaType) -> Bool {
+        return mediaType == jpg || mediaType == png || mediaType == gif
+    }
+
+    /**
+     Gets the MediaType based on the file extension.
+     */
+    static func determineMediaType(_ fileName: String) -> MediaType? {
+        let ext = fileName.pathExtension
+
+        for mediatype in mediatypes {
+            if mediatype.defaultExtension == ext {
+                return mediatype
+            }
+            if mediatype.extensions.contains(ext) {
+                return mediatype
+            }
+        }
+        return nil
+    }
+}