-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathNitroTextImpl+Fragment.swift
More file actions
65 lines (59 loc) · 2.39 KB
/
NitroTextImpl+Fragment.swift
File metadata and controls
65 lines (59 loc) · 2.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
//
// NitroTextImpl+Fragment.swift
// Pods
//
// Extracted helpers for fragment/default merging and font mapping.
//
import UIKit
extension NitroTextImpl {
struct FragmentTopDefaults {
let fontSize: Double?
let fontWeight: FontWeight?
let fontColor: String?
let fontStyle: FontStyle?
let lineHeight: Double?
let textAlign: TextAlign?
let textTransform: TextTransform?
let numberOfLines: Double?
let ellipsizeMode: EllipsizeMode?
}
func apply(fragments: [Fragment]?, text: String?, top: FragmentTopDefaults) {
// Fast path: no fragments, but we have plain text
guard let fragments, !fragments.isEmpty else {
if let t = text {
let single = Fragment(
fontSize: top.fontSize,
fontWeight: top.fontWeight,
fontColor: top.fontColor,
fontStyle: top.fontStyle,
lineHeight: top.lineHeight,
text: t,
numberOfLines: nil,
textAlign: top.textAlign,
textTransform: top.textTransform,
ellipsizeMode: top.ellipsizeMode,
)
setFragments([single])
} else {
setFragments(nil)
}
return
}
var merged: [Fragment] = []
merged.reserveCapacity(fragments.count)
for var frag in fragments {
if frag.text == nil { frag.text = "" }
if frag.fontSize == nil, let v = top.fontSize { frag.fontSize = v }
if frag.fontWeight == nil, let v = top.fontWeight { frag.fontWeight = v }
if frag.fontStyle == nil, let v = top.fontStyle { frag.fontStyle = v }
if frag.lineHeight == nil, let v = top.lineHeight, v > 0 { frag.lineHeight = v }
if frag.fontColor == nil, let v = top.fontColor, !v.isEmpty { frag.fontColor = v }
if frag.textAlign == nil, let v = top.textAlign { frag.textAlign = v }
if frag.textTransform == nil, let v = top.textTransform { frag.textTransform = v }
if frag.numberOfLines == nil, let v = top.numberOfLines { frag.numberOfLines = v }
if frag.ellipsizeMode == nil, let v = top.ellipsizeMode { frag.ellipsizeMode = v }
merged.append(frag)
}
setFragments(merged)
}
}