Skip to content

Commit f12c74c

Browse files
Fix newline rendering
1 parent 7b75a8a commit f12c74c

17 files changed

+554
-2224
lines changed

Sources/App/Controllers/TokenVisitor.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,5 +231,7 @@ final class TokenVisitor: SyntaxRewriter {
231231
newString = newString.replacingOccurrences(of: unescaped, with: escaped, options: .literal, range: nil)
232232
}
233233
return newString
234+
.replacingOccurrences(of: " ", with: " ")
235+
.replacingOccurrences(of: "\n", with: "<br>")
234236
}
235237
}

Tests/AppTests/Fixtures/test-1-1.html

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
1-
<span class='SourceFile' data-title='let number = 0' data-content='SourceFileSyntax' data-type='Syntax' data-range='{"startRow":1,"startColumn":1,"endRow":1,"endColumn":15}'>
2-
<span class='CodeBlockItemList' data-title='let number = 0' data-content='CodeBlockItemListSyntax' data-type='Syntax' data-range='{"startRow":1,"startColumn":1,"endRow":1,"endColumn":15}'>
3-
<span class='CodeBlockItem' data-title='let number = 0' data-content='CodeBlockItemSyntax' data-type='Syntax' data-range='{"startRow":1,"startColumn":1,"endRow":1,"endColumn":15}'>
4-
<span class='VariableDecl' data-title='let number = 0' data-content='VariableDeclSyntax' data-type='Syntax' data-range='{"startRow":1,"startColumn":1,"endRow":1,"endColumn":15}'>
1+
<span class='SourceFile' data-title='let&nbsp;number&nbsp;=&nbsp;0' data-content='SourceFileSyntax' data-type='Syntax' data-range='{"startRow":1,"startColumn":1,"endRow":1,"endColumn":15}'>
2+
<span class='CodeBlockItemList' data-title='let&nbsp;number&nbsp;=&nbsp;0' data-content='CodeBlockItemListSyntax' data-type='Syntax' data-range='{"startRow":1,"startColumn":1,"endRow":1,"endColumn":15}'>
3+
<span class='CodeBlockItem' data-title='let&nbsp;number&nbsp;=&nbsp;0' data-content='CodeBlockItemSyntax' data-type='Syntax' data-range='{"startRow":1,"startColumn":1,"endRow":1,"endColumn":15}'>
4+
<span class='VariableDecl' data-title='let&nbsp;number&nbsp;=&nbsp;0' data-content='VariableDeclSyntax' data-type='Syntax' data-range='{"startRow":1,"startColumn":1,"endRow":1,"endColumn":15}'>
55
<span class='Token' data-title='let' data-content='letKeyword' data-type='Token' data-range='{"startRow":1,"startColumn":1,"endRow":1,"endColumn":4}'>
66
<span class='token keyword' data-title='let' data-content='letKeyword' data-type='Token' data-range='{"startRow":1,"startColumn":1,"endRow":1,"endColumn":4}'>let</span>&nbsp;
77
</span>
8-
<span class='PatternBindingList' data-title='number = 0' data-content='PatternBindingListSyntax' data-type='Syntax' data-range='{"startRow":1,"startColumn":5,"endRow":1,"endColumn":15}'>
9-
<span class='PatternBinding' data-title='number = 0' data-content='PatternBindingSyntax' data-type='Syntax' data-range='{"startRow":1,"startColumn":5,"endRow":1,"endColumn":15}'>
8+
<span class='PatternBindingList' data-title='number&nbsp;=&nbsp;0' data-content='PatternBindingListSyntax' data-type='Syntax' data-range='{"startRow":1,"startColumn":5,"endRow":1,"endColumn":15}'>
9+
<span class='PatternBinding' data-title='number&nbsp;=&nbsp;0' data-content='PatternBindingSyntax' data-type='Syntax' data-range='{"startRow":1,"startColumn":5,"endRow":1,"endColumn":15}'>
1010
<span class='IdentifierPattern' data-title='number' data-content='IdentifierPatternSyntax' data-type='Syntax' data-range='{"startRow":1,"startColumn":5,"endRow":1,"endColumn":11}'>
1111
<span class='Token' data-title='number' data-content='identifier(&quot;number&quot;)' data-type='Token' data-range='{"startRow":1,"startColumn":5,"endRow":1,"endColumn":11}'>
1212
<span class='token identifier' data-title='number' data-content='identifier(&quot;number&quot;)' data-type='Token' data-range='{"startRow":1,"startColumn":5,"endRow":1,"endColumn":11}'>number</span>&nbsp;
1313
</span>
1414
</span>
15-
<span class='InitializerClause' data-title='= 0' data-content='InitializerClauseSyntax' data-type='Syntax' data-range='{"startRow":1,"startColumn":12,"endRow":1,"endColumn":15}'>
15+
<span class='InitializerClause' data-title='=&nbsp;0' data-content='InitializerClauseSyntax' data-type='Syntax' data-range='{"startRow":1,"startColumn":12,"endRow":1,"endColumn":15}'>
1616
<span class='Token' data-title='=' data-content='equal' data-type='Token' data-range='{"startRow":1,"startColumn":12,"endRow":1,"endColumn":13}'>
1717
<span class='token equal' data-title='=' data-content='equal' data-type='Token' data-range='{"startRow":1,"startColumn":12,"endRow":1,"endColumn":13}'>=</span>&nbsp;
1818
</span>

Tests/AppTests/Fixtures/test-1-2.html

Lines changed: 92 additions & 52 deletions
Large diffs are not rendered by default.

Tests/AppTests/Fixtures/test-1-2.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3383,7 +3383,7 @@
33833383
"text": "",
33843384
"token": {
33853385
"kind": "eof",
3386-
"leadingTrivia": "↲↲<span class='lineComment' data-title='// Prints &quot;It&apos;s really warm. Don&apos;t forget to wear sunscreen.&quot;' data-content='lineComment' data-type='Trivia'>// Prints &quot;It&apos;s really warm. Don&apos;t forget to wear sunscreen.&quot;</span>",
3386+
"leadingTrivia": "↲↲<span class='lineComment' data-title='//Prints&quot;It&apos;sreallywarm.Don&apos;tforget␣to␣wearsunscreen.&quot;' data-content='lineComment' data-type='Trivia'>//Prints&quot;It&apos;sreallywarm.Don&apos;tforget␣to␣wearsunscreen.&quot;</span>",
33873387
"trailingTrivia": ""
33883388
},
33893389
"type": "other"

Tests/AppTests/Fixtures/test-1-3.html

Lines changed: 105 additions & 1015 deletions
Large diffs are not rendered by default.

Tests/AppTests/Fixtures/test-1-3.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -809,7 +809,7 @@
809809
"text": "enum",
810810
"token": {
811811
"kind": "enumKeyword",
812-
"leadingTrivia": "↲␣␣<span class='lineComment' data-title='// nested Suit enumeration' data-content='lineComment' data-type='Trivia'>// nested Suit enumeration</span>↲␣␣",
812+
"leadingTrivia": "↲␣␣<span class='lineComment' data-title='//nestedSuitenumeration' data-content='lineComment' data-type='Trivia'>//nestedSuitenumeration</span>↲␣␣",
813813
"trailingTrivia": ""
814814
},
815815
"type": "other"
@@ -3357,7 +3357,7 @@
33573357
"text": "enum",
33583358
"token": {
33593359
"kind": "enumKeyword",
3360-
"leadingTrivia": "↲↲␣␣<span class='lineComment' data-title='// nested Rank enumeration' data-content='lineComment' data-type='Trivia'>// nested Rank enumeration</span>↲␣␣",
3360+
"leadingTrivia": "↲↲␣␣<span class='lineComment' data-title='//nestedRankenumeration' data-content='lineComment' data-type='Trivia'>//nestedRankenumeration</span>↲␣␣",
33613361
"trailingTrivia": ""
33623362
},
33633363
"type": "other"
@@ -11198,7 +11198,7 @@
1119811198
"text": "let",
1119911199
"token": {
1120011200
"kind": "letKeyword",
11201-
"leadingTrivia": "↲↲␣␣<span class='lineComment' data-title='// BlackjackCard properties and methods' data-content='lineComment' data-type='Trivia'>// BlackjackCard properties and methods</span>↲␣␣",
11201+
"leadingTrivia": "↲↲␣␣<span class='lineComment' data-title='//BlackjackCardpropertiesandmethods' data-content='lineComment' data-type='Trivia'>//BlackjackCardpropertiesandmethods</span>↲␣␣",
1120211202
"trailingTrivia": ""
1120311203
},
1120411204
"type": "other"

Tests/AppTests/Fixtures/test-1-4.html

Lines changed: 31 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
1-
<span class='SourceFile' data-title='struct Result&lt; {{↲ let text: String↲ let someOtherThing: String↲}' data-content='SourceFileSyntax' data-type='Syntax' data-range='{"startRow":1,"startColumn":1,"endRow":4,"endColumn":2}'>
2-
<span class='CodeBlockItemList' data-title='struct Result&lt; {{↲ let text: String↲ let someOtherThing: String↲}' data-content='CodeBlockItemListSyntax' data-type='Syntax' data-range='{"startRow":1,"startColumn":1,"endRow":4,"endColumn":2}'>
3-
<span class='CodeBlockItem' data-title='struct Result&lt; {' data-content='CodeBlockItemSyntax' data-type='Syntax' data-range='{"startRow":1,"startColumn":1,"endRow":1,"endColumn":17}'>
4-
<span class='StructDecl' data-title='struct Result&lt; {' data-content='StructDeclSyntax' data-type='Syntax' data-range='{"startRow":1,"startColumn":1,"endRow":1,"endColumn":17}'>
1+
<span class='SourceFile' data-title='struct&nbsp;Result&lt;&nbsp;{{
2+
<br>&nbsp;&nbsp;let&nbsp;text:&nbsp;String
3+
<br>&nbsp;&nbsp;let&nbsp;someOtherThing:&nbsp;String
4+
<br>}' data-content='SourceFileSyntax' data-type='Syntax' data-range='{"startRow":1,"startColumn":1,"endRow":4,"endColumn":2}'>
5+
<span class='CodeBlockItemList' data-title='struct&nbsp;Result&lt;&nbsp;{{
6+
<br>&nbsp;&nbsp;let&nbsp;text:&nbsp;String
7+
<br>&nbsp;&nbsp;let&nbsp;someOtherThing:&nbsp;String
8+
<br>}' data-content='CodeBlockItemListSyntax' data-type='Syntax' data-range='{"startRow":1,"startColumn":1,"endRow":4,"endColumn":2}'>
9+
<span class='CodeBlockItem' data-title='struct&nbsp;Result&lt;&nbsp;{' data-content='CodeBlockItemSyntax' data-type='Syntax' data-range='{"startRow":1,"startColumn":1,"endRow":1,"endColumn":17}'>
10+
<span class='StructDecl' data-title='struct&nbsp;Result&lt;&nbsp;{' data-content='StructDeclSyntax' data-type='Syntax' data-range='{"startRow":1,"startColumn":1,"endRow":1,"endColumn":17}'>
511
<span class='Token' data-title='struct' data-content='structKeyword' data-type='Token' data-range='{"startRow":1,"startColumn":1,"endRow":1,"endColumn":7}'>
612
<span class='token keyword' data-title='struct' data-content='structKeyword' data-type='Token' data-range='{"startRow":1,"startColumn":1,"endRow":1,"endColumn":7}'>struct</span>&nbsp;
713
</span>
814
<span class='Token' data-title='Result' data-content='identifier(&quot;Result&quot;)' data-type='Token' data-range='{"startRow":1,"startColumn":8,"endRow":1,"endColumn":14}'>
915
<span class='token identifier' data-title='Result' data-content='identifier(&quot;Result&quot;)' data-type='Token' data-range='{"startRow":1,"startColumn":8,"endRow":1,"endColumn":14}'>Result</span>
1016
</span>
11-
<span class='GenericParameterClause' data-title='&lt; ' data-content='GenericParameterClauseSyntax' data-type='Syntax' data-range='{"startRow":1,"startColumn":14,"endRow":1,"endColumn":15}'>
17+
<span class='GenericParameterClause' data-title='&lt;&nbsp;' data-content='GenericParameterClauseSyntax' data-type='Syntax' data-range='{"startRow":1,"startColumn":14,"endRow":1,"endColumn":15}'>
1218
<span class='Token' data-title='&lt;' data-content='leftAngle' data-type='Token' data-range='{"startRow":1,"startColumn":14,"endRow":1,"endColumn":15}'>
1319
<span class='token leftAngle' data-title='&lt;' data-content='leftAngle' data-type='Token' data-range='{"startRow":1,"startColumn":14,"endRow":1,"endColumn":15}'>&lt;</span>&nbsp;
1420
</span>
@@ -31,26 +37,33 @@
3137
<span class='token semicolon' data-title='' data-content='semicolon' data-type='Token' data-range='{"startRow":1,"startColumn":17,"endRow":1,"endColumn":17}'></span>
3238
</span>
3339
</span>
34-
<span class='CodeBlockItem' data-title='{↲ let text: String↲ let someOtherThing: String↲}' data-content='CodeBlockItemSyntax' data-type='Syntax' data-range='{"startRow":1,"startColumn":17,"endRow":4,"endColumn":2}'>
35-
<span class='ClosureExpr' data-title='{↲ let text: String↲ let someOtherThing: String↲}' data-content='ClosureExprSyntax' data-type='Syntax' data-range='{"startRow":1,"startColumn":17,"endRow":4,"endColumn":2}'>
40+
<span class='CodeBlockItem' data-title='{
41+
<br>&nbsp;&nbsp;let&nbsp;text:&nbsp;String
42+
<br>&nbsp;&nbsp;let&nbsp;someOtherThing:&nbsp;String
43+
<br>}' data-content='CodeBlockItemSyntax' data-type='Syntax' data-range='{"startRow":1,"startColumn":17,"endRow":4,"endColumn":2}'>
44+
<span class='ClosureExpr' data-title='{
45+
<br>&nbsp;&nbsp;let&nbsp;text:&nbsp;String
46+
<br>&nbsp;&nbsp;let&nbsp;someOtherThing:&nbsp;String
47+
<br>}' data-content='ClosureExprSyntax' data-type='Syntax' data-range='{"startRow":1,"startColumn":17,"endRow":4,"endColumn":2}'>
3648
<span class='Token' data-title='{' data-content='leftBrace' data-type='Token' data-range='{"startRow":1,"startColumn":17,"endRow":1,"endColumn":18}'>
3749
<span class='token leftBrace' data-title='{' data-content='leftBrace' data-type='Token' data-range='{"startRow":1,"startColumn":17,"endRow":1,"endColumn":18}'>{</span>
3850
</span>
39-
<span class='CodeBlockItemList' data-title='let text: String↲ let someOtherThing: String' data-content='CodeBlockItemListSyntax' data-type='Syntax' data-range='{"startRow":2,"startColumn":3,"endRow":3,"endColumn":29}'>
40-
<span class='CodeBlockItem' data-title='let text: String' data-content='CodeBlockItemSyntax' data-type='Syntax' data-range='{"startRow":2,"startColumn":3,"endRow":2,"endColumn":19}'>
41-
<span class='VariableDecl' data-title='let text: String' data-content='VariableDeclSyntax' data-type='Syntax' data-range='{"startRow":2,"startColumn":3,"endRow":2,"endColumn":19}'>
51+
<span class='CodeBlockItemList' data-title='let&nbsp;text:&nbsp;String
52+
<br>&nbsp;&nbsp;let&nbsp;someOtherThing:&nbsp;String' data-content='CodeBlockItemListSyntax' data-type='Syntax' data-range='{"startRow":2,"startColumn":3,"endRow":3,"endColumn":29}'>
53+
<span class='CodeBlockItem' data-title='let&nbsp;text:&nbsp;String' data-content='CodeBlockItemSyntax' data-type='Syntax' data-range='{"startRow":2,"startColumn":3,"endRow":2,"endColumn":19}'>
54+
<span class='VariableDecl' data-title='let&nbsp;text:&nbsp;String' data-content='VariableDeclSyntax' data-type='Syntax' data-range='{"startRow":2,"startColumn":3,"endRow":2,"endColumn":19}'>
4255
<span class='Token' data-title='let' data-content='letKeyword' data-type='Token' data-range='{"startRow":2,"startColumn":3,"endRow":2,"endColumn":6}'>
4356
<br>&nbsp;&nbsp;
4457
<span class='token keyword' data-title='let' data-content='letKeyword' data-type='Token' data-range='{"startRow":2,"startColumn":3,"endRow":2,"endColumn":6}'>let</span>&nbsp;
4558
</span>
46-
<span class='PatternBindingList' data-title='text: String' data-content='PatternBindingListSyntax' data-type='Syntax' data-range='{"startRow":2,"startColumn":7,"endRow":2,"endColumn":19}'>
47-
<span class='PatternBinding' data-title='text: String' data-content='PatternBindingSyntax' data-type='Syntax' data-range='{"startRow":2,"startColumn":7,"endRow":2,"endColumn":19}'>
59+
<span class='PatternBindingList' data-title='text:&nbsp;String' data-content='PatternBindingListSyntax' data-type='Syntax' data-range='{"startRow":2,"startColumn":7,"endRow":2,"endColumn":19}'>
60+
<span class='PatternBinding' data-title='text:&nbsp;String' data-content='PatternBindingSyntax' data-type='Syntax' data-range='{"startRow":2,"startColumn":7,"endRow":2,"endColumn":19}'>
4861
<span class='IdentifierPattern' data-title='text' data-content='IdentifierPatternSyntax' data-type='Syntax' data-range='{"startRow":2,"startColumn":7,"endRow":2,"endColumn":11}'>
4962
<span class='Token' data-title='text' data-content='identifier(&quot;text&quot;)' data-type='Token' data-range='{"startRow":2,"startColumn":7,"endRow":2,"endColumn":11}'>
5063
<span class='token identifier' data-title='text' data-content='identifier(&quot;text&quot;)' data-type='Token' data-range='{"startRow":2,"startColumn":7,"endRow":2,"endColumn":11}'>text</span>
5164
</span>
5265
</span>
53-
<span class='TypeAnnotation' data-title=': String' data-content='TypeAnnotationSyntax' data-type='Syntax' data-range='{"startRow":2,"startColumn":11,"endRow":2,"endColumn":19}'>
66+
<span class='TypeAnnotation' data-title=':&nbsp;String' data-content='TypeAnnotationSyntax' data-type='Syntax' data-range='{"startRow":2,"startColumn":11,"endRow":2,"endColumn":19}'>
5467
<span class='Token' data-title=':' data-content='colon' data-type='Token' data-range='{"startRow":2,"startColumn":11,"endRow":2,"endColumn":12}'>
5568
<span class='token colon' data-title=':' data-content='colon' data-type='Token' data-range='{"startRow":2,"startColumn":11,"endRow":2,"endColumn":12}'>:</span>&nbsp;
5669
</span>
@@ -64,20 +77,20 @@
6477
</span>
6578
</span>
6679
</span>
67-
<span class='CodeBlockItem' data-title='let someOtherThing: String' data-content='CodeBlockItemSyntax' data-type='Syntax' data-range='{"startRow":3,"startColumn":3,"endRow":3,"endColumn":29}'>
68-
<span class='VariableDecl' data-title='let someOtherThing: String' data-content='VariableDeclSyntax' data-type='Syntax' data-range='{"startRow":3,"startColumn":3,"endRow":3,"endColumn":29}'>
80+
<span class='CodeBlockItem' data-title='let&nbsp;someOtherThing:&nbsp;String' data-content='CodeBlockItemSyntax' data-type='Syntax' data-range='{"startRow":3,"startColumn":3,"endRow":3,"endColumn":29}'>
81+
<span class='VariableDecl' data-title='let&nbsp;someOtherThing:&nbsp;String' data-content='VariableDeclSyntax' data-type='Syntax' data-range='{"startRow":3,"startColumn":3,"endRow":3,"endColumn":29}'>
6982
<span class='Token' data-title='let' data-content='letKeyword' data-type='Token' data-range='{"startRow":3,"startColumn":3,"endRow":3,"endColumn":6}'>
7083
<br>&nbsp;&nbsp;
7184
<span class='token keyword' data-title='let' data-content='letKeyword' data-type='Token' data-range='{"startRow":3,"startColumn":3,"endRow":3,"endColumn":6}'>let</span>&nbsp;
7285
</span>
73-
<span class='PatternBindingList' data-title='someOtherThing: String' data-content='PatternBindingListSyntax' data-type='Syntax' data-range='{"startRow":3,"startColumn":7,"endRow":3,"endColumn":29}'>
74-
<span class='PatternBinding' data-title='someOtherThing: String' data-content='PatternBindingSyntax' data-type='Syntax' data-range='{"startRow":3,"startColumn":7,"endRow":3,"endColumn":29}'>
86+
<span class='PatternBindingList' data-title='someOtherThing:&nbsp;String' data-content='PatternBindingListSyntax' data-type='Syntax' data-range='{"startRow":3,"startColumn":7,"endRow":3,"endColumn":29}'>
87+
<span class='PatternBinding' data-title='someOtherThing:&nbsp;String' data-content='PatternBindingSyntax' data-type='Syntax' data-range='{"startRow":3,"startColumn":7,"endRow":3,"endColumn":29}'>
7588
<span class='IdentifierPattern' data-title='someOtherThing' data-content='IdentifierPatternSyntax' data-type='Syntax' data-range='{"startRow":3,"startColumn":7,"endRow":3,"endColumn":21}'>
7689
<span class='Token' data-title='someOtherThing' data-content='identifier(&quot;someOtherThing&quot;)' data-type='Token' data-range='{"startRow":3,"startColumn":7,"endRow":3,"endColumn":21}'>
7790
<span class='token identifier' data-title='someOtherThing' data-content='identifier(&quot;someOtherThing&quot;)' data-type='Token' data-range='{"startRow":3,"startColumn":7,"endRow":3,"endColumn":21}'>someOtherThing</span>
7891
</span>
7992
</span>
80-
<span class='TypeAnnotation' data-title=': String' data-content='TypeAnnotationSyntax' data-type='Syntax' data-range='{"startRow":3,"startColumn":21,"endRow":3,"endColumn":29}'>
93+
<span class='TypeAnnotation' data-title=':&nbsp;String' data-content='TypeAnnotationSyntax' data-type='Syntax' data-range='{"startRow":3,"startColumn":21,"endRow":3,"endColumn":29}'>
8194
<span class='Token' data-title=':' data-content='colon' data-type='Token' data-range='{"startRow":3,"startColumn":21,"endRow":3,"endColumn":22}'>
8295
<span class='token colon' data-title=':' data-content='colon' data-type='Token' data-range='{"startRow":3,"startColumn":21,"endRow":3,"endColumn":22}'>:</span>&nbsp;
8396
</span>

0 commit comments

Comments
 (0)