/// <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),
/// <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; }
/// <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; }
/// <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; }