Example #1
0
        public void Text_CallRule3()
        {
            var subs = Substitution.Parse("←%%spellout-leading← billiards[ →→]").ToArray();

            Assert.AreEqual(3, subs.Length);

            Assert.AreEqual("spellout-leading", subs[0].Descriptor);
            Assert.AreEqual("", subs[0].Text);
            Assert.AreEqual("←", subs[0].Token);
            Assert.AreEqual(null, subs[0].Optionals);

            Assert.AreEqual("", subs[1].Descriptor);
            Assert.AreEqual(" billiards", subs[1].Text);
            Assert.AreEqual("", subs[1].Token);
            Assert.AreEqual(null, subs[1].Optionals);

            Assert.AreEqual("", subs[2].Descriptor);
            Assert.AreEqual("", subs[2].Text);
            Assert.AreEqual("", subs[2].Token);
            Assert.AreNotEqual(null, subs[2].Optionals);

            var opts = subs[2].Optionals;

            Assert.AreEqual("", opts[0].Descriptor);
            Assert.AreEqual(" ", opts[0].Text);
            Assert.AreEqual("", opts[0].Token);
            Assert.AreEqual(null, opts[0].Optionals);

            Assert.AreEqual("", opts[1].Descriptor);
            Assert.AreEqual("", opts[1].Text);
            Assert.AreEqual("→→", opts[1].Token);
            Assert.AreEqual(null, opts[1].Optionals);
        }
Example #2
0
        public void Text_Optional()
        {
            var subs = Substitution.Parse("forty[-→→]").ToArray();

            Assert.AreEqual(2, subs.Length);

            Assert.AreEqual("", subs[0].Descriptor);
            Assert.AreEqual("forty", subs[0].Text);
            Assert.AreEqual("", subs[0].Token);
            Assert.AreEqual(null, subs[0].Optionals);

            Assert.AreEqual("", subs[1].Descriptor);
            Assert.AreEqual("", subs[1].Text);
            Assert.AreEqual("", subs[1].Token);
            Assert.AreNotEqual(null, subs[1].Optionals);

            var opts = subs[1].Optionals;

            Assert.AreEqual("", opts[0].Descriptor);
            Assert.AreEqual("-", opts[0].Text);
            Assert.AreEqual("", opts[0].Token);
            Assert.AreEqual(null, opts[0].Optionals);

            Assert.AreEqual("", opts[1].Descriptor);
            Assert.AreEqual("", opts[1].Text);
            Assert.AreEqual("→→", opts[1].Token);
            Assert.AreEqual(null, opts[1].Optionals);
        }
Example #3
0
        public void Text_CallRule2()
        {
            var subs = Substitution.Parse("vingt[-→%%et-un→]").ToArray();

            Assert.AreEqual(2, subs.Length);

            Assert.AreEqual("", subs[0].Descriptor);
            Assert.AreEqual("vingt", subs[0].Text);
            Assert.AreEqual("", subs[0].Token);
            Assert.AreEqual(null, subs[0].Optionals);

            Assert.AreEqual("", subs[1].Descriptor);
            Assert.AreEqual("", subs[1].Text);
            Assert.AreEqual("", subs[1].Token);
            Assert.AreNotEqual(null, subs[1].Optionals);

            var opts = subs[1].Optionals;

            Assert.AreEqual("", opts[0].Descriptor);
            Assert.AreEqual("-", opts[0].Text);
            Assert.AreEqual("", opts[0].Token);
            Assert.AreEqual(null, opts[0].Optionals);

            Assert.AreEqual("et-un", opts[1].Descriptor);
            Assert.AreEqual("", opts[1].Text);
            Assert.AreEqual("→", opts[1].Token);
            Assert.AreEqual(null, opts[1].Optionals);
        }
Example #4
0
        /// <summary>
        ///   Create a rule from the specified <see cref="XPathNavigator"/>.
        /// </summary>
        /// <param name="xml">
        ///   The XML representation of a rule based number format.
        /// </param>
        /// <returns>
        ///   A new rule.
        /// </returns>
        /// <remarks>
        ///   The <paramref name="xml"/> must be on an "rbnfrule" element.
        /// </remarks>
        public static IRule Parse(XPathNavigator xml)
        {
            Rule rule        = null;
            var  value       = xml.GetAttribute("value", "");
            var  radix       = xml.GetAttribute("radix", "");
            int  radixNumber = radix.Length == 0
                ? 10
                : Int32.Parse(radix, CultureInfo.InvariantCulture);

            switch (value)
            {
            case "-x":
                rule = new NegativeNumberRule();
                break;

            case "Inf":
                rule = new InfinityRule();
                break;

            case "NaN":
                rule = new NanRule();
                break;

            case "x.x":
                rule = new ImproperFractionRule();
                break;

            case "0.x":
                rule = new ProperFractionRule();
                break;

            case "x.0":
                rule = new MasterRule();
                break;

            default:
                var c = value[0];
                if ('0' <= c && c <= '9')
                {
                    rule = new BaseValueRule
                    {
                        LowerLimit = decimal.Parse(value),
                        radix      = radixNumber
                    };
                }
                else
                {
                    throw new FormatException($"Unknown rule value '{value}'.");
                }
                break;
            }

            var body = xml.Value;

            rule.Substitutions = Substitution.Parse(body.TrimEnd(';')).ToArray();

            return(rule);
        }
Example #5
0
        public void TextOnly()
        {
            var subs = Substitution.Parse("one").ToArray();

            Assert.AreEqual(1, subs.Length);
            Assert.AreEqual("", subs[0].Descriptor);
            Assert.AreEqual("one", subs[0].Text);
            Assert.AreEqual("", subs[0].Token);
            Assert.AreEqual(null, subs[0].Optionals);
        }
Example #6
0
        public void NumberPattern()
        {
            var subs = Substitution.Parse("=#,##0=").ToArray();

            Assert.AreEqual(1, subs.Length);

            Assert.AreEqual("#,##0", subs[0].Descriptor);
            Assert.AreEqual("", subs[0].Text);
            Assert.AreEqual("=", subs[0].Token);
            Assert.AreEqual(null, subs[0].Optionals);
        }
Example #7
0
        public void Text_Recurse_GT2()
        {
            var subs = Substitution.Parse("-→→").ToArray();

            Assert.AreEqual(2, subs.Length);

            Assert.AreEqual("", subs[0].Descriptor);
            Assert.AreEqual("-", subs[0].Text);
            Assert.AreEqual("", subs[0].Token);
            Assert.AreEqual(null, subs[0].Optionals);

            Assert.AreEqual("", subs[1].Descriptor);
            Assert.AreEqual("", subs[1].Text);
            Assert.AreEqual("→→", subs[1].Token);
            Assert.AreEqual(null, subs[1].Optionals);
        }
Example #8
0
        public void Text_Recurse_LT()
        {
            var subs = Substitution.Parse("←← hundred").ToArray();

            Assert.AreEqual(2, subs.Length);

            Assert.AreEqual("", subs[0].Descriptor);
            Assert.AreEqual("", subs[0].Text);
            Assert.AreEqual("←←", subs[0].Token);
            Assert.AreEqual(null, subs[0].Optionals);

            Assert.AreEqual("", subs[1].Descriptor);
            Assert.AreEqual(" hundred", subs[1].Text);
            Assert.AreEqual("", subs[1].Token);
            Assert.AreEqual(null, subs[1].Optionals);
        }
Example #9
0
        public void Text_Transfer_to_Rule()
        {
            var subs = Substitution.Parse("e-=%%et-unieme=").ToArray();

            Assert.AreEqual(2, subs.Length);

            Assert.AreEqual("", subs[0].Descriptor);
            Assert.AreEqual("e-", subs[0].Text);
            Assert.AreEqual("", subs[0].Token);
            Assert.AreEqual(null, subs[0].Optionals);

            Assert.AreEqual("et-unieme", subs[1].Descriptor);
            Assert.AreEqual("", subs[1].Text);
            Assert.AreEqual("=", subs[1].Token);
            Assert.AreEqual(null, subs[1].Optionals);
        }
Example #10
0
        public void Text_CallRule1()
        {
            var subs = Substitution.Parse("←← cent→%%cents-m→").ToArray();

            Assert.AreEqual(3, subs.Length);

            Assert.AreEqual("", subs[0].Descriptor);
            Assert.AreEqual("", subs[0].Text);
            Assert.AreEqual("←←", subs[0].Token);
            Assert.AreEqual(null, subs[0].Optionals);

            Assert.AreEqual("", subs[1].Descriptor);
            Assert.AreEqual(" cent", subs[1].Text);
            Assert.AreEqual("", subs[1].Token);
            Assert.AreEqual(null, subs[1].Optionals);

            Assert.AreEqual("cents-m", subs[2].Descriptor);
            Assert.AreEqual("", subs[2].Text);
            Assert.AreEqual("→", subs[2].Token);
            Assert.AreEqual(null, subs[2].Optionals);
        }