File tree Expand file tree Collapse file tree 1 file changed +65
-0
lines changed Expand file tree Collapse file tree 1 file changed +65
-0
lines changed Original file line number Diff line number Diff line change 1
1
import Foundation
2
2
3
+ func isPrintableAsBlockString( _ value: String ) -> Bool {
4
+ if value == " " {
5
+ return true // empty string is printable
6
+ }
7
+
8
+ var isEmptyLine = true
9
+ var hasIndent = false
10
+ var hasCommonIndent = true
11
+ var seenNonEmptyLine = false
12
+
13
+ let scalars = Array ( value. unicodeScalars)
14
+ for i in 0 ..< scalars. count {
15
+ switch scalars [ i] . value {
16
+ case 0x0000 ,
17
+ 0x0001 ,
18
+ 0x0002 ,
19
+ 0x0003 ,
20
+ 0x0004 ,
21
+ 0x0005 ,
22
+ 0x0006 ,
23
+ 0x0007 ,
24
+ 0x0008 ,
25
+ 0x000B ,
26
+ 0x000C ,
27
+ 0x000E ,
28
+ 0x000F :
29
+ return false // Has non-printable characters
30
+
31
+ case 0x000D : // \r
32
+ return false // Has \r or \r\n which will be replaced as \n
33
+
34
+ case 10 : // \n
35
+ if isEmptyLine && !seenNonEmptyLine {
36
+ return false // Has leading new line
37
+ }
38
+ seenNonEmptyLine = true
39
+
40
+ isEmptyLine = true
41
+ hasIndent = false
42
+
43
+ case 9 , // \t
44
+ 32 : // <space>
45
+ if !hasIndent {
46
+ hasIndent = isEmptyLine
47
+ }
48
+
49
+ default :
50
+ if hasCommonIndent {
51
+ hasCommonIndent = hasIndent
52
+ }
53
+ isEmptyLine = false
54
+ }
55
+ }
56
+
57
+ if isEmptyLine {
58
+ return false // Has trailing empty lines
59
+ }
60
+
61
+ if hasCommonIndent && seenNonEmptyLine {
62
+ return false // Has internal indent
63
+ }
64
+
65
+ return true
66
+ }
67
+
3
68
/**
4
69
* Print a block string in the indented block form by adding a leading and
5
70
* trailing blank line. However, if a block string starts with whitespace and is
You can’t perform that action at this time.
0 commit comments