Ejemplo n.º 1
0
 public static JToken ToJson(GetVariant var)
 {
     return(new JObject
     {
         { "type", "getvar" },
         { "id", ToJson(var.Id) },
         { "key", ToJson(var.Key) }
     });
 }
Ejemplo n.º 2
0
        /**
         * Resolve a variant expression to the variant object.
         *
         * @param   {Object} env
         *    Resolver environment object.
         * @param   {Object} expr
         *    An expression to be resolved.
         * @param   {Object} expr.id
         *    An Identifier of a message for which the variant is resolved.
         * @param   {Object} expr.id.name
         *    Name a message for which the variant is resolved.
         * @param   {Object} expr.key
         *    Variant key to be resolved.
         * @returns {FluentType}
         * @private
         */
        static Node VariantExpression(ResolverEnvironment env, GetVariant expr)
        {
            var message = MessageReference(env, expr.Id);

            if (message is FluentNone)
            {
                return(message);
            }
            if (message is Message actualMessage)
            {
                message = actualMessage.Value;
                if (message is Pattern pattern)
                {
                    if (pattern.Elements.Any())
                    {
                        message = pattern.Elements.First();
                    }
                }
            }

            var keyword = (IFluentType)ResolveNode(env, expr.Key);

            if (message is SelectExpression sexp)
            {
                // Match the specified key against keys of each variant, in order.
                foreach (var variant in sexp.Variants)
                {
                    var key = ResolveNode(env, variant.Key);
                    if (keyword.Match(env.Context, key))
                    {
                        return(variant.Value);
                    }
                }
            }

            env.Errors?.Add(new ReferenceError(
                                $"Unknown variant: {keyword.Format(env.Context)}"));
            return(message);
        }