public SyntaxSkriptExpression ToEventExpression(SkriptTypesManager manager, SkriptEvent skriptEvent) { return(new SyntaxSkriptEventValueExpression(this, skriptEvent) { AddonName = skriptEvent.AddonName, Patterns = new[] { ValueName } }); }
private static IExpression TryMatchExpressionOnFile(ParseContext ctx, SkriptTypesManager skriptTypesManager, ParseContext clone, int currentPos, SkriptType skriptType) { IExpression result = null; //If we're dealing with a file, try matching event values too if (ctx is FileParseContext fileParseContext) { var currentNode = fileParseContext.File.Nodes[fileParseContext.CurrentLine]; if (currentNode?.RootParentSyntax?.Element is SkriptEvent rootEvent) { var typesAndExpressions = skriptTypesManager.GetEventExpressionsForEvent(rootEvent); var exprs = typesAndExpressions; if (exprs != null) { foreach (var(_, expressions) in exprs) { if (expressions != null) { foreach (var expression in expressions) { clone.CurrentPosition = currentPos; clone.StartRangeMeasure("Event-Value Expression"); clone.Matches.Clear(); clone.VisitExpression(skriptType, expression); for (var index = 0; index < expression.PatternNodes.Length; index++) { var pattern = expression.PatternNodes[index]; var resultValue = pattern.Parse(clone); if (resultValue.IsSuccess) { var range = clone.EndRangeMeasure("Event-Value Expression"); ctx.ReadUntilPosition(clone.CurrentPosition); result = new SkriptExpression(expression, range, ctx); } } clone.UndoRangeMeasure(); } } } } } } return(result); }
public SkriptWorkspace(WorkspaceManager manager = null) { WorkspaceManager = manager ?? WorkspaceManager.Instance; TypesManager = new SkriptTypesManager(); }