Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2017
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.89 KB | None | 0 0
  1. import Foundation
  2. import UIKit
  3.  
  4.  
  5. fileprivate class LazyStyleMeta: NSObject {
  6. public var fontName: String! = UIFont.systemFont(ofSize: UIFont.systemFontSize).fontName
  7. public var fontSize: CGFloat = UIFont.systemFontSize
  8. public var colorHexString: String! = "000000"
  9. public var colorAlpha: CGFloat = 1
  10.  
  11. // Font from attributes
  12. public var font: UIFont? {
  13. return UIFont(name: fontName, size: fontSize)
  14. }
  15.  
  16. // Color from attributes
  17. public var color: UIColor? {
  18. let scanner = Scanner(string: colorHexString)
  19. var hexInt: UInt64 = 0;
  20.  
  21. if scanner.scanHexInt64(&hexInt) {
  22. return UIColor(hex: hexInt, alpha: colorAlpha)
  23. }
  24.  
  25. return nil
  26. }
  27. }
  28.  
  29.  
  30. /**
  31. Mapping of text styles
  32. */
  33. open class LazyStyleManager: NSObject {
  34. private let BASE_LANGUAGE = "base"
  35.  
  36. private var styleDictForLanguage: [String : [String : LazyStyleMeta]] = [:]
  37. private var fontNameForKey: [String : String] = [:]
  38. private var fontRatioForContentSizeCategory: [UIContentSizeCategory : CGFloat] = [:]
  39. private var defaultStyleMeta = LazyStyleMeta()
  40.  
  41. // Shared instance
  42. static var shared = LazyStyleManager()
  43.  
  44. public override init() {
  45. super.init()
  46.  
  47. defaultStyleMeta.fontSize = UIFont.systemFontSize
  48. defaultStyleMeta.fontName = UIFont.systemFont(ofSize: UIFont.systemFontSize).fontName
  49. defaultStyleMeta.colorHexString = "000000"
  50. defaultStyleMeta.colorAlpha = 1
  51.  
  52. fontRatioForContentSizeCategory = [
  53. .extraSmall: 1,
  54. .small: 1,
  55. .medium: 1,
  56. .large: 1.33,
  57. .extraLarge: 1.66,
  58. .extraExtraLarge: 2,
  59. .extraExtraExtraLarge: 2.5,
  60. ]
  61.  
  62. _add(fontName: "HelveticaNeue", forKey: "n")
  63. _add(fontName: "HelveticaNeue-Medium", forKey: "m")
  64. _add(fontName: "HelveticaNeue-Light", forKey: "l")
  65. _add(fontName: "HelveticaNeue-Bold", forKey: "b")
  66. _add(fontName: "HelveticaNeue", forKey: "n01")
  67. _add(fontName: "HelveticaNeue-Medium", forKey: "m01")
  68. _add(fontName: "HelveticaNeue-Light", forKey: "l01")
  69. _add(fontName: "HelveticaNeue-Bold", forKey: "b01")
  70.  
  71. _ = add(styleFromString:"t01 f0d2b8 15 n cn")
  72. _ = add(styleFromString:"t01 f0d2b8 17 m en")
  73. _ = add(styleFromString:"t03 f0d2b8 18 n cn")
  74. _ = add(styleFromString:"t03 f0d2b8 21 m en")
  75. _ = add(styleFromString:"t04 a59c8c 19")
  76. _ = add(styleFromString:"t05 141c24 19")
  77. _ = add(styleFromString:"t06 0b59ad 25")
  78. _ = add(styleFromString:"t07 141c24 25 n cn")
  79. _ = add(styleFromString:"t07 141c24 20 n en")
  80. _ = add(styleFromString:"t08 141c24 16")
  81. _ = add(styleFromString:"t09 808d98 14 l")
  82. _ = add(styleFromString:"t10 495b6b 18 n cn")
  83. _ = add(styleFromString:"t10 495b6b 18 m en")
  84. _ = add(styleFromString:"t11 808d98 18 m")
  85. _ = add(styleFromString:"t12 000000 18 n cn")
  86. _ = add(styleFromString:"t12 000000 19 m en")
  87. _ = add(styleFromString:"t13 495b6b 10")
  88. _ = add(styleFromString:"t14 141c24 25")
  89. _ = add(styleFromString:"t15 f0d2b8 23")
  90. _ = add(styleFromString:"t16 f0d2b8 13")
  91. _ = add(styleFromString:"t17 f0d2b8 13 l")
  92. _ = add(styleFromString:"t18 808d98 25 n cn")
  93. _ = add(styleFromString:"t18 808d98 20 n en")
  94. _ = add(styleFromString:"t19 ffffff 19")
  95. _ = add(styleFromString:"t20 ffffff 15")
  96.  
  97. _ = add(styleFromString:"s01 f0d2b8 11 l")
  98. _ = add(styleFromString:"s02 808d98 14")
  99. _ = add(styleFromString:"s03 495b6b 18")
  100. _ = add(styleFromString:"s04 ffffff 21")
  101. _ = add(styleFromString:"s05 ffffff 23")
  102. _ = add(styleFromString:"s06 f0d2b8 23")
  103. _ = add(styleFromString:"s07 ffffff 23")
  104. _ = add(styleFromString:"s08 ffffff 18")
  105. _ = add(styleFromString:"s09 f0d2b8 18")
  106. _ = add(styleFromString:"s10 141c24 14")
  107. _ = add(styleFromString:"s11 f0d2b8 24 n cn")
  108. _ = add(styleFromString:"s11 f0d2b8 19 n en")
  109. _ = add(styleFromString:"s12 ffffff 24 n cn")
  110. _ = add(styleFromString:"s12 ffffff 19 n en")
  111. _ = add(styleFromString:"s13 f0d2b8 20 n cn")
  112. _ = add(styleFromString:"s13 f0d2b8 17 n en")
  113. _ = add(styleFromString:"s14 ffffff 20 n cn")
  114. _ = add(styleFromString:"s14 ffffff 17 n en")
  115.  
  116. _ = add(styleFromString:"f01 808d98 18")
  117. _ = add(styleFromString:"f02 ffffff 18")
  118. _ = add(styleFromString:"f03 222222 18 n cn")
  119. _ = add(styleFromString:"f03 222222 15 n en")
  120. _ = add(styleFromString:"f04 808d98 14")
  121. _ = add(styleFromString:"f05 1c57ff 21")
  122. _ = add(styleFromString:"f06 808d98 21")
  123. _ = add(styleFromString:"f07 141c24 21")
  124. _ = add(styleFromString:"f08 1c57ff 18")
  125. _ = add(styleFromString:"f09 8f9ba4 22 n cn")
  126. _ = add(styleFromString:"f09 8f9ba4 19 n en")
  127. _ = add(styleFromString:"f10 383c3f 22 n cn")
  128. _ = add(styleFromString:"f10 383c3f 19 n en")
  129. _ = add(styleFromString:"f11 383c3f 22 n cn")
  130. _ = add(styleFromString:"f11 383c3f 19 n en")
  131. _ = add(styleFromString:"f12 ffffff 22 n cn")
  132. _ = add(styleFromString:"f12 ffffff 19 n en")
  133. _ = add(styleFromString:"f13 898c8e 15")
  134. _ = add(styleFromString:"f14 898c8e 15")
  135. _ = add(styleFromString:"f15 dbdee1 22 n cn")
  136. _ = add(styleFromString:"f15 dbdee1 19 n en")
  137. _ = add(styleFromString:"f16 383c3f 22 n cn")
  138. _ = add(styleFromString:"f16 383c3f 19 n en")
  139. _ = add(styleFromString:"f17 ffffff 18 l cn")
  140. _ = add(styleFromString:"f17 ffffff 15 l en")
  141.  
  142. _ = add(styleFromString:"d01 808d98 10 l")
  143. _ = add(styleFromString:"d02 0b59ad 13 l")
  144. _ = add(styleFromString:"d03 a59c8c 13")
  145. _ = add(styleFromString:"d04 495b6b 16")
  146. _ = add(styleFromString:"d05 343434 23 n cn")
  147. _ = add(styleFromString:"d05 343434 19 n en")
  148. _ = add(styleFromString:"d06 343434 18 n cn")
  149. _ = add(styleFromString:"d06 343434 16 n cn")
  150. _ = add(styleFromString:"d07 141c24 15")
  151. _ = add(styleFromString:"d08 808d98 18")
  152. _ = add(styleFromString:"d09 343434 23 n cn")
  153. _ = add(styleFromString:"d09 343434 17 n en")
  154.  
  155. _ = add(styleFromString:"n01 f0d2b8 60 n02")
  156. _ = add(styleFromString:"n02 a59c8c 40 n02")
  157. _ = add(styleFromString:"n03 f0d2b8 25 n02")
  158. _ = add(styleFromString:"n04 e2183e 40 n02")
  159. _ = add(styleFromString:"n05 4878c0 40 n02")
  160. _ = add(styleFromString:"n06 3ea3ab 40 n02")
  161. _ = add(styleFromString:"n07 8941af 40 n02")
  162. _ = add(styleFromString:"n08 141c24 40 n02")
  163. _ = add(styleFromString:"n09 e4b04a 40 n02")
  164. _ = add(styleFromString:"n10 ff787f 40 n02")
  165. _ = add(styleFromString:"n11 f26522 40 n02")
  166. _ = add(styleFromString:"n12 807d6e 40 n02")
  167. _ = add(styleFromString:"n13 f0d2b8 30 l02")
  168. _ = add(styleFromString:"n14 a59c8c 60 n02")
  169. _ = add(styleFromString:"n24 a59c8c 30 n02")
  170. _ = add(styleFromString:"n25 e42a4d 25 n02")
  171. _ = add(styleFromString:"n26 a59c8c 37.5 n02")
  172. _ = add(styleFromString:"n27 e42a4d 37.5 n02")
  173. _ = add(styleFromString:"n28 a59c8c 18 m")
  174. _ = add(styleFromString:"n29 ffffff 20")
  175. _ = add(styleFromString:"n30 ffffff 15")
  176. _ = add(styleFromString:"n31 b51332 12")
  177. _ = add(styleFromString:"n32 ffffff 33")
  178. _ = add(styleFromString:"n33 3f4449 30")
  179. _ = add(styleFromString:"n34 000000 24")
  180.  
  181. _ = add(styleFromString:"st01 808d98 15 n cn")
  182. _ = add(styleFromString:"st01 808d98 15 m en")
  183. _ = add(styleFromString:"st02 495b6b 15 l")
  184. _ = add(styleFromString:"st03 a59c8c 16")
  185. _ = add(styleFromString:"st04 000000 30")
  186. _ = add(styleFromString:"st05 3586b0 18 n cn")
  187. _ = add(styleFromString:"st05 3586b0 15 m en")
  188. _ = add(styleFromString:"st06 495b6b 18 m")
  189. _ = add(styleFromString:"st07 495b6b 14")
  190. _ = add(styleFromString:"st08 495b6b 14 m")
  191. _ = add(styleFromString:"st09 f0d2b8 16")
  192. _ = add(styleFromString:"st10 f0d2b8 20 l")
  193. _ = add(styleFromString:"st11 f0d2b8 18 l")
  194. _ = add(styleFromString:"st12 141c24 21 n cn")
  195. _ = add(styleFromString:"st12 141c24 16 m en")
  196. _ = add(styleFromString:"st13 a59c8c 20 l")
  197. _ = add(styleFromString:"st14 141c24 18 n cn")
  198. _ = add(styleFromString:"st14 141c24 18 m en")
  199. _ = add(styleFromString:"st15 141c24 18 m")
  200. _ = add(styleFromString:"st16 141c24 18 l cn")
  201. _ = add(styleFromString:"st16 141c24 14 m en")
  202. _ = add(styleFromString:"st17 141c24 21")
  203. _ = add(styleFromString:"st18 c6cbcf 23 n cn")
  204. _ = add(styleFromString:"st18 c6cbcf 17 n en")
  205. _ = add(styleFromString:"st19 999999 17 n cn")
  206. _ = add(styleFromString:"st19 999999 17 n en")
  207. _ = add(styleFromString:"st20 343434 19 n cn")
  208. _ = add(styleFromString:"st20 343434 16 n en")
  209. _ = add(styleFromString:"st21 808d98 14")
  210. _ = add(styleFromString:"st22 cacfd3 14")
  211. _ = add(styleFromString:"st23 1c57ff 14")
  212. _ = add(styleFromString:"st24 000000 19")
  213.  
  214. _ = add(styleFromString:"b01 a59c8c 16 m")
  215. _ = add(styleFromString:"b02 ffffff 18")
  216. _ = add(styleFromString:"b03 ffffff 18 n cn")
  217. _ = add(styleFromString:"b03 ffffff 21 n en")
  218. _ = add(styleFromString:"b04 7e8e9a 15 n cn")
  219. _ = add(styleFromString:"b04 7e8e9a 15 m en")
  220. _ = add(styleFromString:"b05 a59c8c 16")
  221. _ = add(styleFromString:"b06 8d7f4d 15 n cn")
  222. _ = add(styleFromString:"b06 8d7f4d 15 m en")
  223. _ = add(styleFromString:"b07 ffffff 16")
  224. _ = add(styleFromString:"b08 1c57ff 18")
  225. _ = add(styleFromString:"b09 808d98 18")
  226. _ = add(styleFromString:"b10 e6e8ea 18")
  227. _ = add(styleFromString:"b11 141c24 18")
  228. _ = add(styleFromString:"b12 808d98 13")
  229. _ = add(styleFromString:"b13 ffffff 21 n cn")
  230. _ = add(styleFromString:"b13 ffffff 19 n en")
  231. _ = add(styleFromString:"b14 f0d2b8 19 n cn")
  232. _ = add(styleFromString:"b14 f0d2b8 17 l en")
  233. _ = add(styleFromString:"b15 f0d2b8 15")
  234. _ = add(styleFromString:"b16 a9b0b7 17 n cn")
  235. _ = add(styleFromString:"b16 a9b0b7 17 m en")
  236. _ = add(styleFromString:"b17 1c57ff 17 n cn")
  237. _ = add(styleFromString:"b17 1c57ff 17 m en")
  238. _ = add(styleFromString:"b18 e2183e 17 n cn")
  239. _ = add(styleFromString:"b18 e2183e 17 m en")
  240. _ = add(styleFromString:"b19 2762f5 14 l cn")
  241. _ = add(styleFromString:"b19 2762f5 14 n02 en")
  242. _ = add(styleFromString:"b20 d01639 14 l cn")
  243. _ = add(styleFromString:"b20 d01639 14 n02 en")
  244. _ = add(styleFromString:"b21 8d7f4d 14 l cn")
  245. _ = add(styleFromString:"b21 8d7f4d 14 n en")
  246. _ = add(styleFromString:"b22 FFFFFF 14 l cn")
  247. _ = add(styleFromString:"b22 FFFFFF 14 n02 en")
  248. _ = add(styleFromString:"b23 141c24 15 n cn")
  249. _ = add(styleFromString:"b23 141c24 15 m en")
  250. _ = add(styleFromString:"b24 FFFFFF 16")
  251. _ = add(styleFromString:"b25 FFFFFF 14 l")
  252. _ = add(styleFromString:"b26 2762f5 21")
  253. _ = add(styleFromString:"b27 141c24 21")
  254. _ = add(styleFromString:"b28 495b6b 14 n cn")
  255. _ = add(styleFromString:"b28 495b6b 14 l en")
  256. _ = add(styleFromString:"b29 f2bbc1 16 n cn")
  257. _ = add(styleFromString:"b29 f2bbc1 16 m en")
  258. _ = add(styleFromString:"b30 ffffff 16 n cn")
  259. _ = add(styleFromString:"b30 ffffff 16 m en")
  260. _ = add(styleFromString:"b31 c2c7cb 15 n cn")
  261. _ = add(styleFromString:"b31 c2c7cb 15 m en")
  262. _ = add(styleFromString:"b32 1c57ff 15 n cn")
  263. _ = add(styleFromString:"b32 1c57ff 15 m en")
  264. _ = add(styleFromString:"b33 8d7f4d 15 n cn")
  265. _ = add(styleFromString:"b33 8d7f4d 15 m en")
  266. _ = add(styleFromString:"b34 ffffff 18 n cn 0.6")
  267. _ = add(styleFromString:"b34 ffffff 18 n en 0.6")
  268. _ = add(styleFromString:"b35 ffffff 12")
  269. _ = add(styleFromString:"b36 eddbcb 19 l")
  270. _ = add(styleFromString:"b37 d64063 19 l")
  271. _ = add(styleFromString:"b38 495b6b 21")
  272. _ = add(styleFromString:"b39 495b6b 16")
  273.  
  274. _ = add(styleFromString:"m01 ffffff 12")
  275. _ = add(styleFromString:"m02 ffffff 14")
  276. _ = add(styleFromString:"m03 424343 12")
  277. _ = add(styleFromString:"m04 000000 17")
  278. _ = add(styleFromString:"m05 adb3ba 14")
  279. _ = add(styleFromString:"m06 3f4449 20 n cn")
  280. _ = add(styleFromString:"m06 3f4449 18 n en")
  281. _ = add(styleFromString:"m07 a59c8c 24")
  282. _ = add(styleFromString:"m08 141c24 24")
  283. _ = add(styleFromString:"m09 495b6b 30")
  284. _ = add(styleFromString:"m10 ffffff 17 m")
  285. _ = add(styleFromString:"m11 a59c8c 18")
  286. _ = add(styleFromString:"m12 141c24 16 n cn")
  287. _ = add(styleFromString:"m12 141c24 14 m en")
  288. _ = add(styleFromString:"m13 343434 13 n cn")
  289. _ = add(styleFromString:"m13 343434 11 n en")
  290. _ = add(styleFromString:"m14 141c24 19 m")
  291. _ = add(styleFromString:"m15 141c24 25 n cn")
  292. _ = add(styleFromString:"m15 141c24 25 l en")
  293. _ = add(styleFromString:"m16 79682e 12 n cn")
  294. _ = add(styleFromString:"m16 79682e 11 l en")
  295. _ = add(styleFromString:"m17 ffffff 24")
  296.  
  297. _ = add(styleFromString:"ld01 808d98 13")
  298. _ = add(styleFromString:"ld02 808d98 13 l cn")
  299. _ = add(styleFromString:"ld02 808d98 11 l en")
  300. _ = add(styleFromString:"ld03 495b6b 13 m02")
  301. _ = add(styleFromString:"ld04 495b6b 16 m02")
  302. _ = add(styleFromString:"ld05 a59c8c 16 m02")
  303. _ = add(styleFromString:"ld06 a59c8c 16 m02")
  304. _ = add(styleFromString:"ld07 808d98 15")
  305. _ = add(styleFromString:"ld08 808d98 11")
  306. _ = add(styleFromString:"ld09 2762f5 16 n cn")
  307. _ = add(styleFromString:"ld09 2762f5 16 m en")
  308. _ = add(styleFromString:"ld10 141c24 17")
  309. _ = add(styleFromString:"ld11 7e8e9a 13")
  310. _ = add(styleFromString:"ld12 0b59ad 18")
  311. _ = add(styleFromString:"ld13 cacfd3 18 n cn")
  312. _ = add(styleFromString:"ld13 cacfd3 18 m en")
  313. _ = add(styleFromString:"ld14 141c24 13 l")
  314. _ = add(styleFromString:"ld15 3586b0 13 m cn")
  315. _ = add(styleFromString:"ld15 3586b0 12.5 m cn")
  316. _ = add(styleFromString:"ld16 0b59ad 15")
  317. _ = add(styleFromString:"ld17 FFFFFF 12")
  318. _ = add(styleFromString:"ld18 777777 12")
  319. _ = add(styleFromString:"ld19 555555 11")
  320. _ = add(styleFromString:"ld20 ffffff 20")
  321. _ = add(styleFromString:"ld21 f62a51 17")
  322. _ = add(styleFromString:"ld22 ffffff 17")
  323. _ = add(styleFromString:"ld23 cacfd3 17")
  324. _ = add(styleFromString:"ld24 f62a51 14")
  325. _ = add(styleFromString:"ld25 8d7f4d 15")
  326. _ = add(styleFromString:"ld26 ffffff 9")
  327. _ = add(styleFromString:"ld27 ffffff 14 n cn")
  328. _ = add(styleFromString:"ld27 ffffff 14 m en")
  329. _ = add(styleFromString:"ld28 00a651 13")
  330. _ = add(styleFromString:"ld29 3f4449 14")
  331.  
  332. _ = add(styleFromString:"h01 ffffff 17")
  333. _ = add(styleFromString:"h02 ffffff 15")
  334.  
  335. _ = add(styleFromString:"c01 000000 18")
  336. _ = add(styleFromString:"c02 adb3ba 10")
  337. _ = add(styleFromString:"c03 adb3ba 12")
  338. _ = add(styleFromString:"c04 e2183e 17")
  339.  
  340. _ = add(styleFromString:"cl ffffff 15")
  341. _ = add(styleFromString:"cl02 000000 18")
  342. _ = add(styleFromString:"cl03 adb3ba 10 b")
  343. _ = add(styleFromString:"cl04 000000 18")
  344. _ = add(styleFromString:"cl05 adb3ba 12")
  345. _ = add(styleFromString:"cl06 adb3ba 12")
  346. _ = add(styleFromString:"cl07 000000 14")
  347. _ = add(styleFromString:"cl08 adb3ba 10 b")
  348. _ = add(styleFromString:"cl09 000000 14")
  349. _ = add(styleFromString:"cl10 e2183e 10 b")
  350. _ = add(styleFromString:"cl11 4986c5 12 l")
  351. _ = add(styleFromString:"cl12 e2183e 14")
  352. _ = add(styleFromString:"cl13 e2183e 10 b")
  353.  
  354. _ = add(styleFromString:"pu01 000000 18")
  355. _ = add(styleFromString:"pu02 adb3ba 17 l")
  356. _ = add(styleFromString:"pu03 adb3ba 14")
  357. _ = add(styleFromString:"pu04 000000 14")
  358. _ = add(styleFromString:"pu05 000000 17")
  359. _ = add(styleFromString:"pu06 1aad19 17")
  360. _ = add(styleFromString:"pu07 ffffff 12")
  361. _ = add(styleFromString:"pu08 e2183e 20")
  362. _ = add(styleFromString:"pu09 000000 20")
  363.  
  364. _ = add(styleFromString:"se01 adb3ba 14")
  365. _ = add(styleFromString:"se02 000000 14")
  366. _ = add(styleFromString:"se03 adb3ba 18")
  367.  
  368. _ = add(styleFromString:"ep01 ffffff 12")
  369. _ = add(styleFromString:"ep02 000000 17")
  370. _ = add(styleFromString:"ep03 ffffff 18")
  371. }
  372.  
  373.  
  374. // MARK: - Getter
  375. // Get a style
  376. private func _getStyle(forName name: String, inLanguage language: String?) -> LazyStyleMeta? {
  377. let lang = language?.lowercased() ?? BASE_LANGUAGE
  378.  
  379. // Return nothing if language dict not found
  380. guard let dict = styleDictForLanguage[lang] else {
  381. return nil
  382. }
  383.  
  384. // Return nothing if meta not found
  385. guard let style = dict[name.lowercased()] else {
  386. return nil
  387. }
  388.  
  389. return style
  390. }
  391. /**
  392. Try getting a style from desired language pack, else try from base language pack
  393. */
  394. private func _getStyleWithFallback(forName name: String, inLanguage language: String?) -> LazyStyleMeta? {
  395. if let style = _getStyle(forName: name, inLanguage: language) {
  396. return style
  397. }
  398.  
  399. return _getStyle(forName: name, inLanguage: BASE_LANGUAGE)
  400. }
  401.  
  402. /**
  403. Font for certain style
  404. */
  405. open func getFont(forStyleName name: String, inLanguage language: String?) -> UIFont {
  406. guard let style = _getStyleWithFallback(forName: name, inLanguage: language) else {
  407. return defaultStyleMeta.font!
  408. }
  409.  
  410. let fontRatio = fontRatioForContentSizeCategory[UIApplication.shared.preferredContentSizeCategory] ?? 1
  411. let fontSize = style.fontSize * fontRatio
  412. guard let font = UIFont(name: style.fontName, size: fontSize) else {
  413. return defaultStyleMeta.font!
  414. }
  415.  
  416. return font
  417. }
  418. /**
  419. Text color for certain style
  420. */
  421. open func getColor(forStyleName name: String, inLanguage language: String?) -> UIColor {
  422. guard let style = _getStyleWithFallback(forName: name, inLanguage: language) else {
  423. return defaultStyleMeta.color!
  424. }
  425. guard let color = style.color else {
  426. return defaultStyleMeta.color!
  427. }
  428. return color
  429. }
  430. /**
  431. Text attribute for certain style
  432. */
  433. open func getAttributes(forStyleName name: String, inLanguage language: String?) -> [String : Any] {
  434. var attributes: [String : Any] = [:]
  435. guard let style = _getStyleWithFallback(forName: name, inLanguage: language) else {
  436. return attributes
  437. }
  438.  
  439. attributes[NSForegroundColorAttributeName] = style.color
  440. attributes[NSFontAttributeName] = style.font
  441.  
  442. return attributes
  443. }
  444.  
  445.  
  446.  
  447. // MARK: - Helper
  448. // Add a language set
  449. private func add(language: String) -> [String : LazyStyleMeta] {
  450. styleDictForLanguage[language.lowercased()] = [:]
  451.  
  452. return styleDictForLanguage[language.lowercased()]!
  453. }
  454.  
  455. // Add shortcut key for font name
  456. private func _add(fontName: String, forKey key: String) -> Void {
  457. fontNameForKey[key.lowercased()] = fontName
  458. }
  459.  
  460. // Add a language style of certain name to a language set
  461. private func _add(style: LazyStyleMeta, forName name: String, inLanguage language: String?) -> Void {
  462. let lang = language?.lowercased() ?? BASE_LANGUAGE
  463.  
  464. // Ensure style dict for certain language exist
  465. if styleDictForLanguage[lang] == nil {
  466. styleDictForLanguage[lang] = [:]
  467. }
  468.  
  469. styleDictForLanguage[lang]![name.lowercased()] = style;
  470. }
  471. /**
  472. Add a language style from string
  473. Format: "{class name: string} #{color: hex * 6} {font size: int} {font name: string} (language: en/cn)"
  474. */
  475. open func add(styleFromString styleString: String) -> Bool {
  476. let components = styleString.components(separatedBy: " ")
  477. guard components.count > 0 else {
  478. print("Invalid style from \(styleString)")
  479. return false
  480. }
  481. let name = components[0]
  482. var language: String?
  483. let style = LazyStyleMeta()
  484.  
  485. // Set color hex
  486. if components.count > 1 {
  487. style.colorHexString = components[1]
  488. }
  489.  
  490. // Set font size
  491. if components.count > 2 {
  492. if let number = NumberFormatter().number(from: components[2]) {
  493. style.fontSize = CGFloat(number.doubleValue)
  494. } else {
  495. print("Invalid font size from \(styleString)")
  496. }
  497. }
  498.  
  499. // Set font name
  500. if components.count > 3 {
  501. if let name = fontNameForKey[components[3]] {
  502. style.fontName = name
  503. } else {
  504. style.fontName = components[3];
  505. }
  506. }
  507.  
  508. // Set language
  509. if components.count > 4 {
  510. language = components[4]
  511. }
  512.  
  513. // Set color alpha
  514. if components.count > 5 {
  515. if let number = NumberFormatter().number(from: components[5]) {
  516. style.colorAlpha = CGFloat(number.doubleValue)
  517. } else {
  518. print("Invalid color alpha from \(styleString)")
  519. }
  520. }
  521.  
  522. _add(style: style, forName: name, inLanguage: language)
  523.  
  524. return true
  525. }
  526. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement