Skip to content

Commit c572dc8

Browse files
author
Dextinfire
committed
Add support for UTF-16 in strings
1 parent 7cf3d43 commit c572dc8

File tree

2 files changed

+29
-29
lines changed

2 files changed

+29
-29
lines changed

src/MagesScriptTool/ParseUtils.cs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,17 @@ public static bool TrySkip(TextStream reader, char c) {
1010
}
1111

1212
public static bool TrySkip(TextStream reader, string s) {
13-
if (!reader.Has(s.Length - 1)) {
14-
return false;
15-
}
16-
for (int i = 0; i < s.Length; i++) {
17-
if (reader.Peek(i) != s[i]) {
18-
return false;
19-
}
20-
}
21-
reader.Skip(s.Length);
22-
return true;
23-
}
13+
var runes = s.EnumerateRunes();
14+
int i = 0;
15+
foreach (var rune in runes) {
16+
if (!reader.Has(i) || reader.PeekRune(i) != rune) {
17+
return false;
18+
}
19+
i++;
20+
}
21+
reader.Skip(i);
22+
return true;
23+
}
2424

2525
public static bool SkipSpaceComments(TextStream reader) {
2626
bool consumed = false;

src/MagesScriptTool/UncompiledStringSyntax.cs

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -102,28 +102,28 @@ public UncompiledStringParser(TextStream reader) {
102102
public ImmutableArray<StringToken> Parse() {
103103
List<StringToken> tokens = [];
104104
GlyphStyle style = GlyphStyle.Normal;
105-
while (_reader.Has(0) && _reader.Peek(0) != '\n') {
106-
if (_reader.Peek(0) == '〔') {
107-
_reader.Next();
108-
tokens.Add(new StringTokenTag("nameStart", []));
109-
} else if (_reader.Peek(0) == '〕') {
110-
_reader.Next();
111-
tokens.Add(new StringTokenTag("nameEnd", []));
112-
} else if (_reader.Peek(0) == '\\') {
113-
if (_reader.Has(1) && _reader.Peek(1) is '\\' or '〔' or '〕') {
114-
_reader.Skip(1);
115-
tokens.Add(new StringTokenRune(_reader.NextRune(), style));
116-
} else {
117-
tokens.Add(ParseTag());
118-
}
105+
while (_reader.Has(0) && _reader.PeekRune(0) != new Rune('\n')) {
106+
if (_reader.PeekRune(0) == new Rune('〔')) {
107+
_reader.NextRune();
108+
tokens.Add(new StringTokenTag("nameStart", []));
109+
} else if (_reader.PeekRune(0) == new Rune('〕')) {
110+
_reader.NextRune();
111+
tokens.Add(new StringTokenTag("nameEnd", []));
112+
} else if (_reader.PeekRune(0) == new Rune('\\')) {
113+
if (_reader.Has(1) && (_reader.PeekRune(1) == new Rune('\\') || _reader.PeekRune(1) == new Rune('〔') || _reader.PeekRune(1) == new Rune('〕'))) {
114+
_reader.Skip(1);
115+
tokens.Add(new StringTokenRune(_reader.NextRune(), style));
116+
} else {
117+
tokens.Add(ParseTag());
118+
}
119119
} else if (ParseUtils.TrySkip(_reader, "<i>")) {
120-
style = GlyphStyle.Italic;
120+
style = GlyphStyle.Italic;
121121
} else if (ParseUtils.TrySkip(_reader, "</i>")) {
122-
style = GlyphStyle.Normal;
122+
style = GlyphStyle.Normal;
123123
} else {
124-
tokens.Add(new StringTokenRune(_reader.NextRune(), style));
124+
tokens.Add(new StringTokenRune(_reader.NextRune(), style));
125125
}
126-
}
126+
}
127127
return [..tokens];
128128
}
129129

0 commit comments

Comments
 (0)