Skip to content

Commit 2f73546

Browse files
refactor text value system
1 parent 06e4cb6 commit 2f73546

File tree

6 files changed

+63
-43
lines changed

6 files changed

+63
-43
lines changed

Code/ArgumentSystem/Arguments/ValueArgument.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@ public DynamicTryGet<T> GetConvertSolution(BaseToken token)
1919
return $"Value '{token.RawRep}' cannot represent {InputDescription}";
2020
}
2121

22-
return new(() => get());
22+
return new(get);
2323
}
2424
}

Code/ContextSystem/Contexts/VariableDefinition/LiteralVariableDefinitionContext.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public LiteralVariableDefinitionContext(VariableToken<LiteralVariable, LiteralVa
1414
{
1515
if (token is TextToken textToken)
1616
{
17-
return () => new TextValue(textToken.ParsedValue());
17+
return () => textToken.Value;
1818
}
1919

2020
return null;

Code/MethodSystem/Methods/HTTPMethods/AppendJSONMethod.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,12 @@ public override void Execute()
3535
var jsonToAddValueTo = Args.GetReference<JObject>("JSON to add value to");
3636
var key = Args.GetText("key");
3737
var value = Args.GetValue<LiteralValue>("value");
38+
39+
if (value is TextValue textValue)
40+
{
41+
jsonToAddValueTo[key] = textValue.ParsedValue(Script);
42+
return;
43+
}
3844

3945
try
4046
{

Code/TokenSystem/Tokens/TextToken.cs

Lines changed: 3 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -13,43 +13,6 @@ namespace SER.Code.TokenSystem.Tokens;
1313

1414
public class TextToken : LiteralValueToken<TextValue>
1515
{
16-
private static readonly Regex ExpressionRegex = new(@"~?\{.*?\}", RegexOptions.Compiled);
17-
18-
public string ParsedValue() => ContainsExpressions ? ParseValue(Value, Script) : Value;
19-
20-
public bool ContainsExpressions => ExpressionRegex.IsMatch(Value);
21-
22-
public static string ParseValue(string text, Script script) => ExpressionRegex.Replace(text, match =>
23-
{
24-
if (match.Value.StartsWith("~")) return match.Value.Substring(1);
25-
26-
if (Tokenizer.SliceLine(match.Value).HasErrored(out var error, out var slices))
27-
{
28-
Log.Warn(script, error);
29-
return "<error>";
30-
}
31-
32-
if (slices.FirstOrDefault() is not CollectionSlice { Type: CollectionBrackets.Curly } collection)
33-
{
34-
throw new AndrzejFuckedUpException();
35-
}
36-
37-
// ReSharper disable once DuplicatedSequentialIfBodies
38-
if (ExpressionToken.TryParse(collection, script).HasErrored(out error, out var token))
39-
{
40-
Log.Warn(script, error);
41-
return "<error>";
42-
}
43-
44-
if (((BaseToken)token).TryGet<LiteralValue>().HasErrored(out error, out var value))
45-
{
46-
Log.Warn(script, error);
47-
return "<error>";
48-
}
49-
50-
return value.StringRep;
51-
});
52-
5316
protected override IParseResult InternalParse(Script scr)
5417
{
5518
if (Slice is not CollectionSlice { Type: CollectionBrackets.Quotes })
@@ -63,7 +26,9 @@ protected override IParseResult InternalParse(Script scr)
6326

6427
public DynamicTryGet<string> GetDynamicResolver()
6528
{
66-
if (ContainsExpressions) return new(() => TryGet<string>.Success(ParsedValue()));
29+
if (Value.ContainsExpressions)
30+
return new(() => TryGet<string>.Success(Value.ParsedValue(Script)));
31+
6732
return DynamicTryGet.Success(Value.Value);
6833
}
6934
}

Code/ValueSystem/LiteralValue.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ public abstract class LiteralValue(object value) : Value
44
{
55
public abstract string StringRep { get; }
66

7-
public object Value => value;
7+
public readonly object Value = value;
88

99
public override bool EqualCondition(Value other) => other is LiteralValue otherP && Value.Equals(otherP.Value);
1010

Code/ValueSystem/TextValue.cs

Lines changed: 51 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,25 @@
1-
namespace SER.Code.ValueSystem;
1+
using SER.Code.Helpers;
2+
using SER.Code.Helpers.Exceptions;
3+
using SER.Code.Helpers.Extensions;
4+
using SER.Code.ScriptSystem;
5+
using SER.Code.TokenSystem;
6+
using SER.Code.TokenSystem.Slices;
7+
using SER.Code.TokenSystem.Tokens;
8+
using SER.Code.TokenSystem.Tokens.ExpressionTokens;
9+
using System.Text.RegularExpressions;
10+
using SER.Code.TokenSystem.Structures;
211

3-
public class TextValue(string value) : LiteralValue<string>(value)
12+
namespace SER.Code.ValueSystem;
13+
14+
public class TextValue(string rawValue) : LiteralValue<string>(rawValue)
415
{
16+
private readonly string _rawValue = rawValue;
17+
private static readonly Regex ExpressionRegex = new(@"~?\{.*?\}", RegexOptions.Compiled);
18+
19+
public string ParsedValue(Script script) => ContainsExpressions ? ParseValue(_rawValue, script) : _rawValue;
20+
21+
public bool ContainsExpressions => ExpressionRegex.IsMatch(_rawValue);
22+
523
public static implicit operator TextValue(string value)
624
{
725
return new(value);
@@ -13,4 +31,35 @@ public static implicit operator string(TextValue value)
1331
}
1432

1533
public override string StringRep => Value;
34+
35+
public static string ParseValue(string text, Script script) => ExpressionRegex.Replace(text, match =>
36+
{
37+
if (match.Value.StartsWith("~")) return match.Value.Substring(1);
38+
39+
if (Tokenizer.SliceLine(match.Value).HasErrored(out var error, out var slices))
40+
{
41+
Log.Warn(script, error);
42+
return "<error>";
43+
}
44+
45+
if (slices.FirstOrDefault() is not CollectionSlice { Type: CollectionBrackets.Curly } collection)
46+
{
47+
throw new AndrzejFuckedUpException();
48+
}
49+
50+
// ReSharper disable once DuplicatedSequentialIfBodies
51+
if (ExpressionToken.TryParse(collection, script).HasErrored(out error, out var token))
52+
{
53+
Log.Warn(script, error);
54+
return "<error>";
55+
}
56+
57+
if (((BaseToken)token).TryGet<LiteralValue>().HasErrored(out error, out var value))
58+
{
59+
Log.Warn(script, error);
60+
return "<error>";
61+
}
62+
63+
return value.StringRep;
64+
});
1665
}

0 commit comments

Comments
 (0)