Exemple #1
0
        public static IFluentType Resolve(this IInlineExpression self, Scope scope)
        {
            if (self is TextLiteral textLiteral)
            {
                StringWriter stringWriter = new();
                UnicodeUtil.WriteUnescapedUnicode(textLiteral.Value, stringWriter);
                return((FluentString)stringWriter.ToString());
            }

            if (self is NumberLiteral numberLiteral)
            {
                return(FluentNumber.TryNumber(numberLiteral.Value.Span));
            }

            if (self is VariableReference varRef)
            {
                var args = scope.LocalArgs ?? scope.Args;
                if (args != null &&
                    args.TryGetValue(varRef.Id.ToString(), out var arg))
                {
                    return(arg.Copy());
                }

                if (scope.LocalArgs == null)
                {
                    scope.AddError(ResolverFluentError.UnknownVariable(varRef));
                }

                return(new FluentErrType());
            }

            var writer = new StringWriter();

            self.TryWrite(writer, scope);
            return((FluentString)writer.ToString());
        }