Skip to content

Commit b5e3b71

Browse files
Merge pull request #364 from SwiftFiddle/revert-363-revert-362-string-width
Revert "Revert "Fix string width""
2 parents 9e42b49 + c07c660 commit b5e3b71

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+8190
-7
lines changed

Public/js/editor.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -52,16 +52,16 @@ export class Editor {
5252

5353
setSelection(range) {
5454
this.editor.setSelection(
55-
{ ch: range.startColumn - 1, line: range.startRow - 1 },
56-
{ ch: range.endColumn - 1, line: range.endRow - 1 },
55+
{ ch: range.graphemeStartColumn - 1, line: range.startRow - 1 },
56+
{ ch: range.graphemeEndColumn - 1, line: range.endRow - 1 },
5757
{ scroll: false }
5858
);
5959
}
6060

6161
markText(range) {
6262
return this.editor.markText(
63-
{ ch: range.startColumn - 1, line: range.startRow - 1 },
64-
{ ch: range.endColumn - 1, line: range.endRow - 1 },
63+
{ ch: range.graphemeStartColumn - 1, line: range.startRow - 1 },
64+
{ ch: range.graphemeEndColumn - 1, line: range.endRow - 1 },
6565
{
6666
className: "editor-marker",
6767
startStyle: "editor-marker-start",

Resources/parsers/50800/Package.resolved

+9
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11
{
22
"pins" : [
3+
{
4+
"identity" : "stringwidth",
5+
"kind" : "remoteSourceControl",
6+
"location" : "https://github.com/kishikawakatsumi/StringWidth.git",
7+
"state" : {
8+
"branch" : "main",
9+
"revision" : "e4c8035546a046d3461a1621c5643a963f97bc20"
10+
}
11+
},
312
{
413
"identity" : "swift-syntax",
514
"kind" : "remoteSourceControl",

Resources/parsers/50800/Package.swift

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ let package = Package(
88
],
99
dependencies: [
1010
.package(url: "https://github.com/apple/swift-syntax", from: "508.0.1"),
11+
.package(url: "https://github.com/kishikawakatsumi/StringWidth.git", branch: "main"),
1112
],
1213
targets: [
1314
.executableTarget(
@@ -16,6 +17,7 @@ let package = Package(
1617
.product(name: "SwiftSyntax", package: "swift-syntax"),
1718
.product(name: "SwiftOperators", package: "swift-syntax"),
1819
.product(name: "SwiftParser", package: "swift-syntax"),
20+
.product(name: "StringWidth", package: "StringWidth"),
1921
],
2022
swiftSettings: [
2123
.unsafeFlags(["-cross-module-optimization"], .when(configuration: .release))

Resources/parsers/50800/Sources/parser/TokenVisitor.swift

+17-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import Foundation
22
import SwiftSyntax
3+
import StringWidth
34

45
final class TokenVisitor: SyntaxRewriter {
56
var list = [String]()
@@ -51,6 +52,19 @@ final class TokenVisitor: SyntaxRewriter {
5152
let endRow = end.line ?? 1
5253
let endColumn = end.column ?? 1
5354

55+
let graphemeStartColumn: Int
56+
if let prefix = String(locationConverter.sourceLines[startRow - 1].utf8.prefix(startColumn - 1)) {
57+
graphemeStartColumn = stringWidth(prefix) + 1
58+
} else {
59+
graphemeStartColumn = startColumn
60+
}
61+
let graphemeEndColumn: Int
62+
if let prefix = String(locationConverter.sourceLines[endRow - 1].utf8.prefix(endColumn - 1)) {
63+
graphemeEndColumn = stringWidth(prefix) + 1
64+
} else {
65+
graphemeEndColumn = endColumn
66+
}
67+
5468
list.append(
5569
"<span class='\(className)' " +
5670
"data-title='\(title.escapeHTML().replaceInvisiblesWithSymbols())' " +
@@ -79,8 +93,10 @@ final class TokenVisitor: SyntaxRewriter {
7993
range: Range(
8094
startRow: startRow,
8195
startColumn: startColumn,
96+
graphemeStartColumn: graphemeStartColumn,
8297
endRow: endRow,
83-
endColumn: endColumn
98+
endColumn: endColumn,
99+
graphemeEndColumn: graphemeEndColumn
84100
),
85101
type: syntaxType
86102
)

Resources/parsers/50800/Sources/parser/TreeNode.swift

+3-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ final class TreeNode: Codable {
55
var parent: Int?
66

77
var text: String
8-
var range = Range(startRow: 0, startColumn: 0, endRow: 0, endColumn: 0)
8+
var range = Range(startRow: 0, startColumn: 0, graphemeStartColumn: 0, endRow: 0, endColumn: 0, graphemeEndColumn: 0)
99
var structure = [StructureProperty]()
1010
var type: SyntaxType
1111
var token: Token?
@@ -50,8 +50,10 @@ extension TreeNode: CustomStringConvertible {
5050
struct Range: Codable, Equatable {
5151
let startRow: Int
5252
let startColumn: Int
53+
let graphemeStartColumn: Int
5354
let endRow: Int
5455
let endColumn: Int
56+
let graphemeEndColumn: Int
5557
}
5658

5759
extension Range: CustomStringConvertible {

Resources/parsers/50800/Tests/Tests/Fixtures/test-1-1.json

+28
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
"range": {
55
"endColumn": 15,
66
"endRow": 1,
7+
"graphemeEndColumn": 15,
8+
"graphemeStartColumn": 1,
79
"startColumn": 1,
810
"startRow": 1
911
},
@@ -50,6 +52,8 @@
5052
"range": {
5153
"endColumn": 15,
5254
"endRow": 1,
55+
"graphemeEndColumn": 15,
56+
"graphemeStartColumn": 1,
5357
"startColumn": 1,
5458
"startRow": 1
5559
},
@@ -76,6 +80,8 @@
7680
"range": {
7781
"endColumn": 15,
7882
"endRow": 1,
83+
"graphemeEndColumn": 15,
84+
"graphemeStartColumn": 1,
7985
"startColumn": 1,
8086
"startRow": 1
8187
},
@@ -133,6 +139,8 @@
133139
"range": {
134140
"endColumn": 15,
135141
"endRow": 1,
142+
"graphemeEndColumn": 15,
143+
"graphemeStartColumn": 1,
136144
"startColumn": 1,
137145
"startRow": 1
138146
},
@@ -203,6 +211,8 @@
203211
"range": {
204212
"endColumn": 4,
205213
"endRow": 1,
214+
"graphemeEndColumn": 4,
215+
"graphemeStartColumn": 1,
206216
"startColumn": 1,
207217
"startRow": 1
208218
},
@@ -221,6 +231,8 @@
221231
"range": {
222232
"endColumn": 15,
223233
"endRow": 1,
234+
"graphemeEndColumn": 15,
235+
"graphemeStartColumn": 5,
224236
"startColumn": 5,
225237
"startRow": 1
226238
},
@@ -247,6 +259,8 @@
247259
"range": {
248260
"endColumn": 15,
249261
"endRow": 1,
262+
"graphemeEndColumn": 15,
263+
"graphemeStartColumn": 5,
250264
"startColumn": 5,
251265
"startRow": 1
252266
},
@@ -329,6 +343,8 @@
329343
"range": {
330344
"endColumn": 11,
331345
"endRow": 1,
346+
"graphemeEndColumn": 11,
347+
"graphemeStartColumn": 5,
332348
"startColumn": 5,
333349
"startRow": 1
334350
},
@@ -362,6 +378,8 @@
362378
"range": {
363379
"endColumn": 11,
364380
"endRow": 1,
381+
"graphemeEndColumn": 11,
382+
"graphemeStartColumn": 5,
365383
"startColumn": 5,
366384
"startRow": 1
367385
},
@@ -380,6 +398,8 @@
380398
"range": {
381399
"endColumn": 15,
382400
"endRow": 1,
401+
"graphemeEndColumn": 15,
402+
"graphemeStartColumn": 12,
383403
"startColumn": 12,
384404
"startRow": 1
385405
},
@@ -426,6 +446,8 @@
426446
"range": {
427447
"endColumn": 13,
428448
"endRow": 1,
449+
"graphemeEndColumn": 13,
450+
"graphemeStartColumn": 12,
429451
"startColumn": 12,
430452
"startRow": 1
431453
},
@@ -444,6 +466,8 @@
444466
"range": {
445467
"endColumn": 15,
446468
"endRow": 1,
469+
"graphemeEndColumn": 15,
470+
"graphemeStartColumn": 14,
447471
"startColumn": 14,
448472
"startRow": 1
449473
},
@@ -477,6 +501,8 @@
477501
"range": {
478502
"endColumn": 15,
479503
"endRow": 1,
504+
"graphemeEndColumn": 15,
505+
"graphemeStartColumn": 14,
480506
"startColumn": 14,
481507
"startRow": 1
482508
},
@@ -495,6 +521,8 @@
495521
"range": {
496522
"endColumn": 15,
497523
"endRow": 1,
524+
"graphemeEndColumn": 15,
525+
"graphemeStartColumn": 15,
498526
"startColumn": 15,
499527
"startRow": 1
500528
},

0 commit comments

Comments
 (0)