added iOS source code
[wl-app.git] / iOS / WolneLektury / Extensions / NSAttributedString+Ext.swift
1 //
2 //  NSAttributedString+Ext.swift
3 //  WolneLektury
4 //
5 //  Created by Pawel Dabrowski on 30/05/2018.
6 //  Copyright © 2018 Fundacja Nowoczesna Polska. All rights reserved.
7 //
8
9 import Foundation
10
11 import UIKit
12
13 extension NSAttributedString{
14     
15     
16     static func AttributedString(font: UIFont, text: String, lineSpacing: CGFloat, textAlignment: NSTextAlignment) -> NSAttributedString{
17         
18         let paragraphStyle = NSMutableParagraphStyle()
19         paragraphStyle.lineSpacing = 1.0
20         paragraphStyle.lineHeightMultiple = lineSpacing
21         paragraphStyle.alignment = textAlignment
22         
23         let attrString = NSMutableAttributedString(string: text)
24         attrString.addAttribute(NSAttributedStringKey.font, value: font, range: NSMakeRange(0, attrString.length))
25         attrString.addAttribute(NSAttributedStringKey.paragraphStyle, value:paragraphStyle, range:NSMakeRange(0, attrString.length))
26         return attrString;
27     }
28     
29     static func AttributedString(font: UIFont, text: String, color: UIColor) -> NSAttributedString{
30         
31         let attrString = NSMutableAttributedString(string: text)
32         attrString.addAttribute(NSAttributedStringKey.font, value: font, range: NSMakeRange(0, attrString.length))
33         attrString.addAttribute(NSAttributedStringKey.foregroundColor, value: color, range: NSMakeRange(0, attrString.length))
34         return attrString;
35     }
36     
37     
38     public convenience init(html:String) throws {
39         
40         let htmString = "<html><head><style> " +
41             "\nbody \n{\n" +
42             //"text-align: justify;\n" +
43                         "font-size: 11.00pt;\n" +
44                         "font-family: '-apple-system';\n" +
45                         "line-height: 6px;\n" +
46             "} \n" +
47             "</style></head><body>\(html)</body>" +
48         "</html>"
49         
50         
51         guard let data =  htmString.data(using: .unicode, allowLossyConversion: true) else {
52             throw NSError(domain: "Invalid HTML", code: -500, userInfo: nil)
53         }
54         
55         try self.init(data: data, options: [.documentType: NSAttributedString.DocumentType.html], documentAttributes: nil)
56     }
57     
58     
59     public convenience init(string: String?, font: UIFont?) {
60         self.init(string: string, font: font, color: nil, textAlignment: nil, lineSpacing: nil)
61     }
62     
63     public convenience init(string: String?, font: UIFont?, color: UIColor?) {
64         self.init(string: string, font: font, color: color, textAlignment: nil, lineSpacing: nil)
65     }
66     
67     public convenience init(string: String?, font: UIFont?, color: UIColor?, textAlignment: NSTextAlignment?) {
68         self.init(string: string, font: font, color: color, textAlignment: textAlignment, lineSpacing: nil)
69     }
70     
71     public convenience init(string: String?, font: UIFont?, textAlignment: NSTextAlignment?) {
72         self.init(string: string, font: font, color: nil, textAlignment: textAlignment, lineSpacing: nil)
73     }
74     
75     public convenience init(string: String?, font: UIFont?, color: UIColor?, textAlignment: NSTextAlignment?, lineSpacing: CGFloat?) {
76         
77         let style = NSMutableParagraphStyle()
78         var addStyle = false
79         
80         
81         style.lineBreakMode = .byWordWrapping;
82         
83         var str = ""
84         if let value = string{
85             str = value
86         }
87         
88         var dict = [NSAttributedStringKey : AnyObject]()
89         if let fnt = font{
90             dict[NSAttributedStringKey.font] = fnt
91         }
92         
93         if let clr = color{
94             dict[NSAttributedStringKey.foregroundColor] = clr
95         }
96         
97         if let tal = textAlignment{
98             style.alignment = tal
99             if(tal == .justified){
100                 style.firstLineHeadIndent = 0.05;
101             }
102             addStyle = true
103         }
104         
105         if let ls = lineSpacing{
106             style.lineSpacing = ls
107             addStyle = true
108         }
109         
110         
111         if(addStyle){
112             dict[NSAttributedStringKey.paragraphStyle] = style
113         }
114         
115         self.init(string: str, attributes: dict)
116         return
117     }
118 }