Beispiel #1
0
    internal void SynchronizeToken(ParsedToken parsedToken, string remainingText)
    {
        if (parsedToken.QueryToken == null)
        {
            string tokenString = parsedToken.String;

            if (tokenString.StartsWith("$"))
            {
                string v = tokenString.TryBefore('.') ?? tokenString;

                if (!Variables.TryGetValue(v, out ValueProviderBase? prov))
                {
                    SafeConsole.WriteLineColor(ConsoleColor.Magenta, "Variable '{0}' not found!".FormatWith(v));
                }

                var provToken = prov as TokenValueProvider;
                if (!(provToken is TokenValueProvider))
                {
                    SafeConsole.WriteLineColor(ConsoleColor.Magenta, "Variable '{0}' is not a Query Token");
                }

                var part = provToken?.ParsedToken;

                if (part != null && part.QueryToken == null)
                {
                    SafeConsole.WriteLineColor(ConsoleColor.Magenta, "Variable '{0}' is not fixed yet! currently: '{1}'".FormatWith(v, part.String));
                }

                var after = tokenString.TryAfter('.');

                tokenString =
                    (part == null ? "Unknown" :
                     part.QueryToken == null ? part.String :
                     part.QueryToken.FullKey()) + (after == null ? null : ("." + after));
            }

            SafeConsole.WriteColor(ConsoleColor.Red, "  " + tokenString);
            Console.WriteLine(" " + remainingText);

            FixTokenResult result = QueryTokenSynchronizer.FixToken(Replacements, tokenString, out QueryToken? token, QueryDescription, SubTokensOptions.CanElement | SubTokensOptions.CanAnyAll /*not always*/, remainingText, allowRemoveToken: false, allowReGenerate: ModelType != null);
            switch (result)
            {
            case FixTokenResult.Nothing:
            case FixTokenResult.Fix:
                this.HasChanges        = true;
                parsedToken.QueryToken = token;
                parsedToken.String     = token !.FullKey();
                break;

            case FixTokenResult.SkipEntity:
            case FixTokenResult.RemoveToken:
            case FixTokenResult.ReGenerateEntity:
                throw new TemplateSyncException(result);
            }
        }
    }
Beispiel #2
0
    public void SynchronizeValue(Type type, ref string?value, bool isList)
    {
        string?        val    = value;
        FixTokenResult result = QueryTokenSynchronizer.FixValue(Replacements, type, ref val, allowRemoveToken: false, isList: isList);

        switch (result)
        {
        case FixTokenResult.Fix:
        case FixTokenResult.Nothing:
            value = val;
            break;

        case FixTokenResult.SkipEntity:
        case FixTokenResult.RemoveToken:
            throw new TemplateSyncException(result);
        }
    }
Beispiel #3
0
        public static FixTokenResult FixToken(Replacements replacements, ref QueryTokenEmbedded token, QueryDescription qd, SubTokensOptions options, string remainingText, bool allowRemoveToken, bool allowReCreate)
        {
            SafeConsole.WriteColor(token.ParseException == null ? ConsoleColor.Gray : ConsoleColor.Red, "  " + token.TokenString);
            Console.WriteLine(" " + remainingText);

            if (token.ParseException == null)
            {
                return(FixTokenResult.Nothing);
            }

            FixTokenResult result = FixToken(replacements, token.TokenString, out QueryToken resultToken, qd, options, remainingText, allowRemoveToken, allowReCreate);

            if (result == FixTokenResult.Fix)
            {
                token = new QueryTokenEmbedded(resultToken);
            }

            return(result);
        }
Beispiel #4
0
 public TemplateSyncException(FixTokenResult result)
 {
     this.Result = result;
 }