using System.Security.Cryptography; using System.Text.RegularExpressions; using Dungeoneer.Lexing; namespace Dungeoneer { public class RollExpression { private IList Parts; public string Print { get; private set; } public string Expression { get; private set; } public dynamic Result { get { try { return Scripting.Expr($"eval('{Expression}')"); } catch { return null; } } } public RollExpression(IList parts) { this.Parts = parts; this.Print = ""; this.Expression = ""; // build expression from string parts foreach(string piece in Parts) { // die expression substitution var dieCheck = DiceToken.Match(piece); if(dieCheck.Success) { var token = new DiceToken(dieCheck); this.Print += $"{token.Format()} "; this.Expression += $"{token.Expression()} "; } else { var part = $"{piece} "; this.Expression += part; this.Print += part; } } } } }