@@ -12,98 +12,154 @@ import UIKit
12
12
import AppKit
13
13
#endif
14
14
15
- public struct MarkupStyleList {
16
- let type : MarkupStyleType
17
- let headIndentMultiply : CGFloat
18
- let indentMultiply : CGFloat
19
- let startingItemNumber : Int
15
+ public enum MarkupStyleType {
16
+ case octal
17
+ case lowercaseAlpha
18
+ case decimal
19
+ case lowercaseHexadecimal
20
+ case lowercaseLatin
21
+ case lowercaseRoman
22
+ case uppercaseAlpha
23
+ case uppercaseLatin
24
+ case uppercaseRoman
25
+ case uppercaseHexadecimal
26
+ case hyphen
27
+ case check
28
+ case circle
29
+ case disc
30
+ case diamond
31
+ case box
32
+ case square
33
+ case custom( String )
20
34
21
- /// {headIndentMultiply} - {indentMultiply} List Item 1
22
- /// {headIndentMultiply} - {indentMultiply} List Item 2
23
- /// mutiply base size is current font size
24
- public init ( type: MarkupStyleType = . disc, headIndentMultiply: CGFloat = 0.25 , indentMultiply: CGFloat = 0.5 , startingItemNumber: Int = 1 ) {
25
- self . type = type
26
- self . headIndentMultiply = headIndentMultiply
27
- self . startingItemNumber = startingItemNumber
28
- self . indentMultiply = indentMultiply
35
+ public init ? ( format: NSTextList . MarkerFormat ) {
36
+ switch format {
37
+ case . octal:
38
+ self = . octal
39
+ case . lowercaseAlpha:
40
+ self = . lowercaseAlpha
41
+ case . decimal:
42
+ self = . decimal
43
+ case . lowercaseHexadecimal:
44
+ self = . lowercaseHexadecimal
45
+ case . lowercaseLatin:
46
+ self = . lowercaseLatin
47
+ case . lowercaseRoman:
48
+ self = . lowercaseRoman
49
+ case . uppercaseAlpha:
50
+ self = . uppercaseAlpha
51
+ case . uppercaseLatin:
52
+ self = . uppercaseLatin
53
+ case . uppercaseRoman:
54
+ self = . uppercaseRoman
55
+ case . uppercaseHexadecimal:
56
+ self = . uppercaseHexadecimal
57
+ case . hyphen:
58
+ self = . hyphen
59
+ case . check:
60
+ self = . check
61
+ case . circle:
62
+ self = . circle
63
+ case . disc:
64
+ self = . disc
65
+ case . diamond:
66
+ self = . diamond
67
+ case . box:
68
+ self = . box
69
+ case . square:
70
+ self = . square
71
+ default :
72
+ return nil
73
+ }
29
74
}
30
75
31
- func marker( forItemNumber: Int ) -> String {
32
- return type. marker ( forItemNumber: forItemNumber, startingItemNumber: startingItemNumber)
76
+ func isOrder( ) -> Bool {
77
+ switch self {
78
+ case . octal, . lowercaseAlpha, . decimal, . lowercaseHexadecimal, . lowercaseLatin, . lowercaseRoman, . uppercaseAlpha, . uppercaseLatin, . uppercaseRoman, . uppercaseHexadecimal:
79
+ return true
80
+ case . hyphen, . check, . circle, . disc, . diamond, . box, . square, . custom:
81
+ return false
82
+ }
33
83
}
34
84
35
- // due to tab width caculator, we can't provide custom(String)
36
- public enum MarkupStyleType {
37
- case octal
38
- case lowercaseAlpha
39
- case decimal
40
- case lowercaseHexadecimal
41
- case lowercaseLatin
42
- case lowercaseRoman
43
- case uppercaseAlpha
44
- case uppercaseLatin
45
- case uppercaseRoman
46
- case uppercaseHexadecimal
47
- case hyphen
48
- case check
49
- case circle
50
- case disc
51
- case diamond
52
- case box
53
- case square
54
-
55
- func isOrder( ) -> Bool {
56
- switch self {
57
- case . octal, . lowercaseAlpha, . decimal, . lowercaseHexadecimal, . lowercaseLatin, . lowercaseRoman, . uppercaseAlpha, . uppercaseLatin, . uppercaseRoman, . uppercaseHexadecimal:
58
- return true
59
- case . hyphen, . check, . circle, . disc, . diamond, . box, . square:
60
- return false
61
- }
62
- }
63
-
64
- func marker( forItemNumber: Int , startingItemNumber: Int ) -> String {
65
- let textList : NSTextList
66
- switch self {
67
- case . octal:
68
- textList = NSTextList ( markerFormat: . octal, options: 0 )
69
- case . lowercaseAlpha:
70
- textList = NSTextList ( markerFormat: . lowercaseAlpha, options: 0 )
71
- case . decimal:
72
- textList = NSTextList ( markerFormat: . decimal, options: 0 )
73
- case . lowercaseHexadecimal:
74
- textList = NSTextList ( markerFormat: . lowercaseHexadecimal, options: 0 )
75
- case . lowercaseLatin:
76
- textList = NSTextList ( markerFormat: . lowercaseLatin, options: 0 )
77
- case . lowercaseRoman:
78
- textList = NSTextList ( markerFormat: . lowercaseRoman, options: 0 )
79
- case . uppercaseAlpha:
80
- textList = NSTextList ( markerFormat: . uppercaseAlpha, options: 0 )
81
- case . uppercaseLatin:
82
- textList = NSTextList ( markerFormat: . uppercaseLatin, options: 0 )
83
- case . uppercaseRoman:
84
- textList = NSTextList ( markerFormat: . uppercaseRoman, options: 0 )
85
- case . uppercaseHexadecimal:
86
- textList = NSTextList ( markerFormat: . uppercaseHexadecimal, options: 0 )
87
- case . hyphen:
88
- textList = NSTextList ( markerFormat: . hyphen, options: 0 )
89
- case . check:
90
- textList = NSTextList ( markerFormat: . check, options: 0 )
91
- case . circle:
92
- textList = NSTextList ( markerFormat: . circle, options: 0 )
93
- case . disc:
94
- textList = NSTextList ( markerFormat: . disc, options: 0 )
95
- case . diamond:
96
- textList = NSTextList ( markerFormat: . diamond, options: 0 )
97
- case . box:
98
- textList = NSTextList ( markerFormat: . box, options: 0 )
99
- case . square:
100
- textList = NSTextList ( markerFormat: . square, options: 0 )
101
- }
102
-
103
- textList. startingItemNumber = startingItemNumber
104
- let format = ( isOrder ( ) ) ? ( " \t %@. \t " ) : ( " \t %@ \t " )
105
- return String ( format: format, textList. marker ( forItemNumber: forItemNumber) )
85
+ func getItem( startingItemNumber: Int , forItemNumber: Int ) -> String {
86
+ // We only NSTextList to generate symbol, because NSTextList have abnormal extra spaces.
87
+ // ref: https://stackoverflow.com/questions/66714650/nstextlist-formatting
88
+ switch self {
89
+ case . octal:
90
+ let textList = NSTextList ( markerFormat: . octal, options: 0 )
91
+ textList. startingItemNumber = startingItemNumber
92
+ return textList. marker ( forItemNumber: forItemNumber)
93
+ case . lowercaseAlpha:
94
+ let textList = NSTextList ( markerFormat: . lowercaseAlpha, options: 0 )
95
+ textList. startingItemNumber = startingItemNumber
96
+ return textList. marker ( forItemNumber: forItemNumber)
97
+ case . decimal:
98
+ let textList = NSTextList ( markerFormat: . decimal, options: 0 )
99
+ textList. startingItemNumber = startingItemNumber
100
+ return textList. marker ( forItemNumber: forItemNumber)
101
+ case . lowercaseHexadecimal:
102
+ let textList = NSTextList ( markerFormat: . lowercaseHexadecimal, options: 0 )
103
+ textList. startingItemNumber = startingItemNumber
104
+ return textList. marker ( forItemNumber: forItemNumber)
105
+ case . lowercaseLatin:
106
+ let textList = NSTextList ( markerFormat: . lowercaseLatin, options: 0 )
107
+ textList. startingItemNumber = startingItemNumber
108
+ return textList. marker ( forItemNumber: forItemNumber)
109
+ case . lowercaseRoman:
110
+ let textList = NSTextList ( markerFormat: . lowercaseRoman, options: 0 )
111
+ textList. startingItemNumber = startingItemNumber
112
+ return textList. marker ( forItemNumber: forItemNumber)
113
+ case . uppercaseAlpha:
114
+ let textList = NSTextList ( markerFormat: . uppercaseAlpha, options: 0 )
115
+ textList. startingItemNumber = startingItemNumber
116
+ return textList. marker ( forItemNumber: forItemNumber)
117
+ case . uppercaseLatin:
118
+ let textList = NSTextList ( markerFormat: . uppercaseLatin, options: 0 )
119
+ textList. startingItemNumber = startingItemNumber
120
+ return textList. marker ( forItemNumber: forItemNumber)
121
+ case . uppercaseRoman:
122
+ let textList = NSTextList ( markerFormat: . uppercaseRoman, options: 0 )
123
+ textList. startingItemNumber = startingItemNumber
124
+ return textList. marker ( forItemNumber: forItemNumber)
125
+ case . uppercaseHexadecimal:
126
+ let textList = NSTextList ( markerFormat: . uppercaseHexadecimal, options: 0 )
127
+ textList. startingItemNumber = startingItemNumber
128
+ return textList. marker ( forItemNumber: forItemNumber)
129
+ case . hyphen:
130
+ let textList = NSTextList ( markerFormat: . hyphen, options: 0 )
131
+ textList. startingItemNumber = startingItemNumber
132
+ return textList. marker ( forItemNumber: forItemNumber)
133
+ case . check:
134
+ let textList = NSTextList ( markerFormat: . check, options: 0 )
135
+ textList. startingItemNumber = startingItemNumber
136
+ return textList. marker ( forItemNumber: forItemNumber)
137
+ case . circle:
138
+ let textList = NSTextList ( markerFormat: . circle, options: 0 )
139
+ textList. startingItemNumber = startingItemNumber
140
+ return textList. marker ( forItemNumber: forItemNumber)
141
+ case . disc:
142
+ let textList = NSTextList ( markerFormat: . disc, options: 0 )
143
+ textList. startingItemNumber = startingItemNumber
144
+ return textList. marker ( forItemNumber: forItemNumber)
145
+ case . diamond:
146
+ let textList = NSTextList ( markerFormat: . diamond, options: 0 )
147
+ textList. startingItemNumber = startingItemNumber
148
+ return textList. marker ( forItemNumber: forItemNumber)
149
+ case . box:
150
+ let textList = NSTextList ( markerFormat: . box, options: 0 )
151
+ textList. startingItemNumber = startingItemNumber
152
+ return textList. marker ( forItemNumber: forItemNumber)
153
+ case . square:
154
+ let textList = NSTextList ( markerFormat: . square, options: 0 )
155
+ textList. startingItemNumber = startingItemNumber
156
+ return textList. marker ( forItemNumber: forItemNumber)
157
+ case . custom( let custom) :
158
+ return custom
106
159
}
107
160
}
108
-
161
+
162
+ func getFormat( ) -> String {
163
+ return ( isOrder ( ) ) ? ( " \t %@. \t " ) : ( " \t %@ \t " )
164
+ }
109
165
}
0 commit comments