Skip to content

Commit d302758

Browse files
committed
Fixed issues with special chars in labels
1 parent 5504477 commit d302758

File tree

8 files changed

+17
-8
lines changed

8 files changed

+17
-8
lines changed

src/Yuka.Cli/Yuka.Cli.csproj.user

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
33
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
4-
<StartArguments>-vw unpack "S:\Games\Visual Novels\AkaSaka\data01.ykc"</StartArguments>
4+
<StartArguments>-vw pack "S:\Games\Visual Novels\AkaSaka\data01"</StartArguments>
55
</PropertyGroup>
66
</Project>

src/Yuka.Core/Script/Data/DataElement.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public Ctrl(ScriptValue.Str name) : base(DataElementType.Ctrl) {
6262
public override string DisplayInfo => $"{base.DisplayInfo} [{Name}]";
6363

6464
// the # is interpreted as a comment, so replace it with _
65-
public override string ToString() => ':' + Name.StringValue.Replace('#', '_');
65+
public override string ToString() => ':' + Name.StringValue.EscapeIdentifier();
6666
}
6767

6868
public sealed class CInt : DataElement {

src/Yuka.Core/Script/Data/ScriptValue.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
namespace Yuka.Script.Data {
1+
using System.Linq;
2+
3+
namespace Yuka.Script.Data {
24
public abstract class ScriptValue {
35
public class Int : ScriptValue {
46
public int IntValue;
@@ -19,6 +21,7 @@ public class Str : ScriptValue {
1921
public Str(string value) {
2022
StringValue = value;
2123
}
24+
2225
public override string ToString() => StringValue;
2326
}
2427
}

src/Yuka.Core/Script/Decompiler.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using Yuka.Script.Syntax;
99
using Yuka.Script.Syntax.Expr;
1010
using Yuka.Script.Syntax.Stmt;
11+
using Yuka.Util;
1112

1213
namespace Yuka.Script {
1314

@@ -143,7 +144,7 @@ protected Expression ToExpression(DataElement element) {
143144
switch(element) {
144145

145146
case DataElement.Ctrl ctrl:
146-
return new JumpLabelExpr { LabelStmt = new JumpLabelStmt { Name = ctrl.Name.StringValue } };
147+
return new JumpLabelExpr { LabelStmt = new JumpLabelStmt { Name = ctrl.Name.StringValue.EscapeIdentifier() } };
147148

148149
case DataElement.CInt cint when cint.Value.IsPointer:
149150
return new PointerLiteral { PointerId = cint.Value.PointerId };
@@ -228,7 +229,7 @@ protected Statement ReadStatement() {
228229
if(label.Name == "{") {
229230
return ReadBlockStatement();
230231
}
231-
return new JumpLabelStmt { Name = label.Name };
232+
return new JumpLabelStmt { Name = label.Name.EscapeIdentifier() };
232233

233234
case CallInstruction func:
234235

src/Yuka.Core/Script/Source/Lexer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
namespace Yuka.Script.Source {
99
public class Lexer : IDisposable {
1010

11-
protected static readonly char[] OperatorChars = { '+', '-', '*', '/', '=', '<', '>' };
11+
protected static readonly char[] OperatorChars = { '+', '-', '*', '/', '%', '=', '<', '>' };
1212
protected static readonly Dictionary<char, TokenKind> SingleCharTokens = new Dictionary<char, TokenKind> {
1313
{ '$', TokenKind.Dollar },
1414
{ '&', TokenKind.Ampersand },

src/Yuka.Core/Script/Source/Parser.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ public BlockStmt ParseBlockStatement() {
9494

9595
public JumpLabelStmt ParseJumpLabelStatement() {
9696
return new JumpLabelStmt {
97-
Name = ConsumeToken(TokenKind.LabelLiteral).Source.TrimStart(':')
97+
Name = ConsumeToken(TokenKind.LabelLiteral).Source.TrimStart(':').EscapeIdentifier()
9898
};
9999
}
100100

src/Yuka.Core/Script/Syntax/Stmt/JumpLabelStmt.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
using System.Diagnostics;
2+
using Yuka.Util;
23

34
namespace Yuka.Script.Syntax.Stmt {
45
public class JumpLabelStmt : Statement {
56
public string Name;
67

7-
public override string ToString() => $"\n:{Name}";
8+
public override string ToString() => $"\n:{Name.EscapeIdentifier()}";
89

910
[DebuggerStepThrough]
1011
public override void Accept<T>(ISyntaxVisitor<T> visitor) => visitor.Visit(this);

src/Yuka.Core/Util/Helpers.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,10 @@ public static T Clamp<T>(this T val, T min, T max) where T : IComparable<T> {
137137
return val.CompareTo(min) < 0 ? min : val.CompareTo(max) > 0 ? max : val;
138138
}
139139

140+
public static string EscapeIdentifier(this string value) {
141+
return string.Concat(value.Select(ch => char.IsLetterOrDigit(ch) ? ch : '_'));
142+
}
143+
140144
public static string Escape(this string value) {
141145
return value.Replace(@"\", @"\\").Replace(@"""", @"\""").Replace("\n", @"\n").Replace("\r", @"\r").Replace("\t", @"\t");
142146
}

0 commit comments

Comments
 (0)