예제 #1
0
            /// <summary>
            /// Convert <see cref="IPluralRuleInfosExpression"/> to <see cref="PluralRuleInfo"/>.
            /// </summary>
            /// <param name="infoExps"></param>
            /// <returns></returns>
            public static PluralRuleInfo Convert(IPluralRuleInfosExpression infoExps)
            {
                string ruleset = "", category = "", culture = "", @case = ""; int optional = 0;

                if (infoExps != null && infoExps.Infos != null)
                {
                    foreach (var infoExp in infoExps.Infos)
                    {
                        if (infoExp.Name == "RuleSet")
                        {
                            ruleset = infoExp.Value ?? "";
                        }
                        else if (infoExp.Name == "Category")
                        {
                            category = infoExp.Value ?? "";
                        }
                        else if (infoExp.Name == "Culture")
                        {
                            culture = infoExp.Value ?? "";
                        }
                        else if (infoExp.Name == "Case")
                        {
                            @case = infoExp.Value ?? "";
                        }
                        else if (infoExp.Name == "Optional" && !string.IsNullOrEmpty(infoExp.Value))
                        {
                            optional = Int32.Parse(infoExp.Value);
                        }
                    }
                }
                return(new PluralRuleInfo(ruleset, category, culture, @case, optional));
            }
 /// <summary>
 /// Append expression
 /// </summary>
 /// <param name="exp"></param>
 /// <param name="postSeparator"></param>
 /// <returns></returns>
 public override PluralRuleExpressionPrinter Append(IExpression exp, string postSeparator = null)
 {
     if (exp == null)
     {
         return(this);
     }
     var x = exp switch
     {
         IPluralRuleExpression pre => Append(pre.Infos, " ").Append(pre.Rule, " ").Append(pre.Samples, " "),
         IPluralRuleInfosExpression infos => Append('[').Append(infos.Infos, ",").Append(']'),
         IPluralRuleInfoExpression info => Append(info.Name).Append('=').Append(info.Value),
         ISamplesExpression samples => (Append("@" + samples.Name + " ") as PluralRuleExpressionStringPrinter).AppendSamples(samples.Samples, ", "),
         IRangeExpression range => Append(range.MinValue).Append("..").Append(range.MaxValue),
         IGroupExpression group => Append(group.Values, ","),
         IInfiniteExpression inf => Append('…'),
         IConstantExpression c => Append(c.Value?.ToString()),
         IArgumentNameExpression arg => Append(arg.Name),
         IParenthesisExpression par => Append('(').Append(par.Element).Append(')'),
         IUnaryOpExpression uop => Append(uop.Op switch { UnaryOp.Plus => "+", UnaryOp.Not => "not ", UnaryOp.OnesComplement => "~", UnaryOp.Negate => "-", _ => "¤" }).Append(uop.Element),
예제 #3
0
 /// <summary>
 /// Create rule that evaluates with <paramref name="ruleExpression"/>.
 /// </summary>
 /// <param name="info"></param>
 /// <param name="infoExpression">info expression</param>
 /// <param name="ruleExpression"></param>
 /// <param name="samplesExpression"></param>
 public Expression(PluralRuleInfo info, IPluralRuleInfosExpression infoExpression, IExpression ruleExpression, params ISamplesExpression[] samplesExpression) : base(info)
 {
     this.Infos   = infoExpression;
     this.Rule    = ruleExpression;
     this.Samples = samplesExpression ?? NO_SAMPLES;
 }
예제 #4
0
 /// <summary>
 /// Create rule that always evaluates to true.
 /// </summary>
 /// <param name="info"></param>
 /// <param name="infosExp"></param>
 /// <param name="ruleExp"></param>
 /// <param name="samplesExps"></param>
 public TrueWithExpression(PluralRuleInfo info, IPluralRuleInfosExpression infosExp, IExpression ruleExp, params ISamplesExpression[] samplesExps) : base(info)
 {
     this.Infos   = infosExp;
     this.Rule    = ruleExp;
     this.Samples = samplesExps;
 }
예제 #5
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="infos">(optional) name of the expression</param>
 /// <param name="rule"></param>
 /// <param name="samples"></param>
 public PluralRuleExpression(IPluralRuleInfosExpression infos, IExpression rule, params ISamplesExpression[] samples)
 {
     Infos   = infos;
     Rule    = rule;
     Samples = samples;
 }