diff --git a/YarnSpinner.Tests/MarkupTests.cs b/YarnSpinner.Tests/MarkupTests.cs index 67fa4c072..c564420f2 100644 --- a/YarnSpinner.Tests/MarkupTests.cs +++ b/YarnSpinner.Tests/MarkupTests.cs @@ -57,6 +57,8 @@ private LineParser.MarkupTreeNode Descendant(LineParser.MarkupTreeNode root, par [InlineData("this is a line with [markup markup = 1]a single markup[/markup] inside of it", new LineParser.LexerTokenTypes[] { LineParser.LexerTokenTypes.Text, LineParser.LexerTokenTypes.OpenMarker, LineParser.LexerTokenTypes.Identifier, LineParser.LexerTokenTypes.Identifier, LineParser.LexerTokenTypes.Equals, LineParser.LexerTokenTypes.NumberValue, LineParser.LexerTokenTypes.CloseMarker, LineParser.LexerTokenTypes.Text, LineParser.LexerTokenTypes.OpenMarker, LineParser.LexerTokenTypes.CloseSlash, LineParser.LexerTokenTypes.Identifier, LineParser.LexerTokenTypes.CloseMarker, LineParser.LexerTokenTypes.Text }, new string[] { "this is a line with ", "[", "markup", "markup", "=", "1", "]", "a single markup", "[", "/", "markup", "]", " inside of it" })] [InlineData("this is a line with [interpolated markup = {$property} /] inside", new LineParser.LexerTokenTypes[] { LineParser.LexerTokenTypes.Text, LineParser.LexerTokenTypes.OpenMarker, LineParser.LexerTokenTypes.Identifier, LineParser.LexerTokenTypes.Identifier, LineParser.LexerTokenTypes.Equals, LineParser.LexerTokenTypes.InterpolatedValue, LineParser.LexerTokenTypes.CloseSlash, LineParser.LexerTokenTypes.CloseMarker, LineParser.LexerTokenTypes.Text, }, new string[] { "this is a line with ", "[", "interpolated", "markup", "=", "{$property}", "/", "]", " inside" })] [InlineData("á [a]S[/a]", new LineParser.LexerTokenTypes[] { LineParser.LexerTokenTypes.Text, LineParser.LexerTokenTypes.OpenMarker, LineParser.LexerTokenTypes.Identifier, LineParser.LexerTokenTypes.CloseMarker, LineParser.LexerTokenTypes.Text, LineParser.LexerTokenTypes.OpenMarker, LineParser.LexerTokenTypes.CloseSlash, LineParser.LexerTokenTypes.Identifier, LineParser.LexerTokenTypes.CloseMarker, }, new string[] { "á ", "[", "a", "]", "S", "[", "/", "a", "]" })] + [InlineData("start [markup=-1 /] end", new LineParser.LexerTokenTypes[] {LineParser.LexerTokenTypes.Text, LineParser.LexerTokenTypes.OpenMarker, LineParser.LexerTokenTypes.Identifier, LineParser.LexerTokenTypes.Equals, LineParser.LexerTokenTypes.NumberValue, LineParser.LexerTokenTypes.CloseSlash, LineParser.LexerTokenTypes.CloseMarker, LineParser.LexerTokenTypes.Text}, new string[] {"start ", "[", "markup", "=", "-1", "/", "]", " end"})] + [InlineData("start [markup=-1.0 /] end", new LineParser.LexerTokenTypes[] {LineParser.LexerTokenTypes.Text, LineParser.LexerTokenTypes.OpenMarker, LineParser.LexerTokenTypes.Identifier, LineParser.LexerTokenTypes.Equals, LineParser.LexerTokenTypes.NumberValue, LineParser.LexerTokenTypes.CloseSlash, LineParser.LexerTokenTypes.CloseMarker, LineParser.LexerTokenTypes.Text}, new string[] {"start ", "[", "markup", "=", "-1.0", "/", "]", " end"})] void TestLexerGeneratesCorrectTokens(string line, LineParser.LexerTokenTypes[] types, string[] texts) { var lineParser = new LineParser(); @@ -1079,6 +1081,8 @@ public void TestMarkupMultiplePropertyParsing() [InlineData("[a p=true]s[/a]", MarkupValueType.Bool, "True")] [InlineData("[a p=false]s[/a]", MarkupValueType.Bool, "False")] [InlineData("[a p={$someValue}]s[/a]", MarkupValueType.String, "$someValue")] + [InlineData("[p=-1 /]", MarkupValueType.Integer, "-1")] + [InlineData("[p=-1.1 /]", MarkupValueType.Float, "-1.1")] public void TestMarkupPropertyParsing(string input, MarkupValueType expectedType, string expectedValueAsString) { var lineParser = new LineParser(); diff --git a/YarnSpinner/YarnSpinner.Markup/LineParser.cs b/YarnSpinner/YarnSpinner.Markup/LineParser.cs index 6c3ade232..fae0c74de 100644 --- a/YarnSpinner/YarnSpinner.Markup/LineParser.cs +++ b/YarnSpinner/YarnSpinner.Markup/LineParser.cs @@ -468,7 +468,8 @@ internal List LexMarkup(string input) if (!char.IsWhiteSpace(c)) { // we are a number - if (char.IsDigit(c)) + // this happens if we are either a digit or the negation symbol + if (char.IsDigit(c) || c == '-') { var token = new LexerToken() {