private BuildResult FeedCodeFile(ref FileData fileData, CodeFile codeFile, CodeKeyword rootKeyword, string rootScope) { var scriptActions = ScriptActionRegistry.Actions; bool foundOne = false; for (var s = 0; s < scriptActions.Count; s++) { var action = scriptActions[s]; if (action.ExistInVocabulary(rootKeyword)) { foundOne = true; break; } } if (!foundOne) { return(Error((BuildResult)BuildResult.ValueType.PrateekScriptInvalidKeyword + rootKeyword.keyword.Content, ref fileData)); } var scopeRule = (KeywordUsage) default; for (var s = 0; s < scriptActions.Count; s++) { var action = scriptActions[s]; if (!codeFile.AllowRule(action)) { continue; } var keywordRule = action.GetKeywordUsage(rootKeyword, rootScope); if (keywordRule.keywordUsageType == KeywordUsageType.None || keywordRule.keywordUsageType == KeywordUsageType.Ignore) { continue; } if (!action.FeedCodeFile(fileData, codeFile, keywordRule, rootKeyword)) { return(Error((BuildResult)BuildResult.ValueType.PrateekScriptDataNotTreated + rootKeyword.keyword.Content, ref fileData)); } scopeRule = keywordRule; break; } var scopes = rootKeyword.scopeContent != null ? new List <CodeScope> { rootKeyword.scopeContent } : null; for (var s = 0; scopes != null && s < scopes.Count; s++) { var scope = scopes[s]; foreach (var codeCommand in scope.innerCommands) { if (!(codeCommand is CodeKeyword innerKeyword)) { continue; } var buildResult = FeedCodeFile(ref fileData, codeFile, innerKeyword, rootKeyword.keyword.Content); if (buildResult.Value != BuildResult.ValueType.Success) { return(buildResult); } } if (scope.innerScopes.Count == 0) { continue; } scopes.InsertRange(s + 1, scope.innerScopes); } if (scopeRule.keywordUsageType != KeywordUsageType.None && scopeRule.onCloseScope != null) { scopeRule.onCloseScope(codeFile, rootKeyword.keyword.Content); } return(BuildResult.ValueType.Success); }