コード例 #1
0
        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);
        }