added iOS source code
[wl-app.git] / iOS / WolneLektury / Extensions / NSAttributedString+Ext.swift
diff --git a/iOS/WolneLektury/Extensions/NSAttributedString+Ext.swift b/iOS/WolneLektury/Extensions/NSAttributedString+Ext.swift
new file mode 100644 (file)
index 0000000..ff6f8c9
--- /dev/null
@@ -0,0 +1,118 @@
+//
+//  NSAttributedString+Ext.swift
+//  WolneLektury
+//
+//  Created by Pawel Dabrowski on 30/05/2018.
+//  Copyright © 2018 Fundacja Nowoczesna Polska. All rights reserved.
+//
+
+import Foundation
+
+import UIKit
+
+extension NSAttributedString{
+    
+    
+    static func AttributedString(font: UIFont, text: String, lineSpacing: CGFloat, textAlignment: NSTextAlignment) -> NSAttributedString{
+        
+        let paragraphStyle = NSMutableParagraphStyle()
+        paragraphStyle.lineSpacing = 1.0
+        paragraphStyle.lineHeightMultiple = lineSpacing
+        paragraphStyle.alignment = textAlignment
+        
+        let attrString = NSMutableAttributedString(string: text)
+        attrString.addAttribute(NSAttributedStringKey.font, value: font, range: NSMakeRange(0, attrString.length))
+        attrString.addAttribute(NSAttributedStringKey.paragraphStyle, value:paragraphStyle, range:NSMakeRange(0, attrString.length))
+        return attrString;
+    }
+    
+    static func AttributedString(font: UIFont, text: String, color: UIColor) -> NSAttributedString{
+        
+        let attrString = NSMutableAttributedString(string: text)
+        attrString.addAttribute(NSAttributedStringKey.font, value: font, range: NSMakeRange(0, attrString.length))
+        attrString.addAttribute(NSAttributedStringKey.foregroundColor, value: color, range: NSMakeRange(0, attrString.length))
+        return attrString;
+    }
+    
+    
+    public convenience init(html:String) throws {
+        
+        let htmString = "<html><head><style> " +
+            "\nbody \n{\n" +
+            //"text-align: justify;\n" +
+                        "font-size: 11.00pt;\n" +
+                        "font-family: '-apple-system';\n" +
+                        "line-height: 6px;\n" +
+            "} \n" +
+            "</style></head><body>\(html)</body>" +
+        "</html>"
+        
+        
+        guard let data =  htmString.data(using: .unicode, allowLossyConversion: true) else {
+            throw NSError(domain: "Invalid HTML", code: -500, userInfo: nil)
+        }
+        
+        try self.init(data: data, options: [.documentType: NSAttributedString.DocumentType.html], documentAttributes: nil)
+    }
+    
+    
+    public convenience init(string: String?, font: UIFont?) {
+        self.init(string: string, font: font, color: nil, textAlignment: nil, lineSpacing: nil)
+    }
+    
+    public convenience init(string: String?, font: UIFont?, color: UIColor?) {
+        self.init(string: string, font: font, color: color, textAlignment: nil, lineSpacing: nil)
+    }
+    
+    public convenience init(string: String?, font: UIFont?, color: UIColor?, textAlignment: NSTextAlignment?) {
+        self.init(string: string, font: font, color: color, textAlignment: textAlignment, lineSpacing: nil)
+    }
+    
+    public convenience init(string: String?, font: UIFont?, textAlignment: NSTextAlignment?) {
+        self.init(string: string, font: font, color: nil, textAlignment: textAlignment, lineSpacing: nil)
+    }
+    
+    public convenience init(string: String?, font: UIFont?, color: UIColor?, textAlignment: NSTextAlignment?, lineSpacing: CGFloat?) {
+        
+        let style = NSMutableParagraphStyle()
+        var addStyle = false
+        
+        
+        style.lineBreakMode = .byWordWrapping;
+        
+        var str = ""
+        if let value = string{
+            str = value
+        }
+        
+        var dict = [NSAttributedStringKey : AnyObject]()
+        if let fnt = font{
+            dict[NSAttributedStringKey.font] = fnt
+        }
+        
+        if let clr = color{
+            dict[NSAttributedStringKey.foregroundColor] = clr
+        }
+        
+        if let tal = textAlignment{
+            style.alignment = tal
+            if(tal == .justified){
+                style.firstLineHeadIndent = 0.05;
+            }
+            addStyle = true
+        }
+        
+        if let ls = lineSpacing{
+            style.lineSpacing = ls
+            addStyle = true
+        }
+        
+        
+        if(addStyle){
+            dict[NSAttributedStringKey.paragraphStyle] = style
+        }
+        
+        self.init(string: str, attributes: dict)
+        return
+    }
+}