Esempio n. 1
0
        public void TestNoLimits()
        {
            var input = @"\sum\nolimits";
            var list  = MathLists.FromString(input);

            Assert.Single(list);
            var op = list[0] as LargeOperator;

            Assert.Equal(MathAtomType.LargeOperator, op.AtomType);
            Assert.False(op.Limits);
            var latex = MathListBuilder.MathListToString(list);

            Assert.Equal(@"\sum \nolimits ", latex);
        }
Esempio n. 2
0
        public void TestUnspecifiedLimits()
        {
            var input = @"\sum";
            var list  = MathLists.FromString(input);

            Assert.Single(list);
            var op = list[0] as LargeOperator;

            Assert.Equal(MathAtomType.LargeOperator, op.AtomType);
            Assert.Null(op.Limits);
            var latex = MathListBuilder.MathListToString(list);

            Assert.Equal(@"\sum ", latex);
        }
Esempio n. 3
0
        public void TestBuilder(string input, MathAtomType[] atomTypes, string output)
        {
            var builder = new MathListBuilder(input);
            var list    = builder.Build();

            Assert.Null(builder.Error);

            ExpandGroups(list);
            CheckAtomTypes(list, atomTypes);


            var latex = MathListBuilder.MathListToString(list);

            Assert.Equal(output, latex);
        }
Esempio n. 4
0
        public void TestFontMultipleCharacters()
        {
            var input = @"\frak{xy}";
            var list  = MathLists.FromString(input);

            Assert.Equal(2, list.Count);
            CheckAtomTypeAndNucleus(list[0], MathAtomType.Variable, "x");
            Assert.Equal(FontStyle.Fraktur, list[0].FontStyle);
            CheckAtomTypeAndNucleus(list[1], MathAtomType.Variable, "y");
            Assert.Equal(FontStyle.Fraktur, list[1].FontStyle);

            var latex = MathListBuilder.MathListToString(list);

            Assert.Equal(@"\mathfrak{xy}", latex);
        }
Esempio n. 5
0
        public void TestText()
        {
            var input = @"\text{x y}";
            var list  = MathLists.FromString(input);

            Assert.Equal(3, list.Count);
            CheckAtomTypeAndNucleus(list[0], MathAtomType.Variable, @"x");
            Assert.Equal(FontStyle.Roman, list[0].FontStyle);

            CheckAtomTypeAndNucleus(list[1], MathAtomType.Ordinary, " ");
            CheckAtomTypeAndNucleus(list[2], MathAtomType.Variable, @"y");
            Assert.Equal(FontStyle.Roman, list[2].FontStyle);

            var latex = MathListBuilder.MathListToString(list);

            Assert.Equal(@"\mathrm{x\  y}", latex);
        }
Esempio n. 6
0
        public void TestAccent()
        {
            var input = @"\bar x";
            var list  = MathLists.FromString(input);

            Assert.Single(list);
            var accent = list[0] as IAccent;

            CheckAtomTypeAndNucleus(accent, MathAtomType.Accent, "\u0304");

            var inner = accent.InnerList;

            Assert.Single(inner);
            CheckAtomTypeAndNucleus(inner[0], MathAtomType.Variable, "x");

            var latex = MathListBuilder.MathListToString(list);

            Assert.Equal(@"\bar{x}", latex);
        }
Esempio n. 7
0
        public void TestUnderline()
        {
            var input = @"\underline 2";
            var list  = MathLists.FromString(input);

            Assert.Single(list);
            var underline = list[0] as IUnderline;

            CheckAtomTypeAndNucleus(underline, MathAtomType.Underline, "");

            var inner = underline.InnerList;

            Assert.Single(inner);
            CheckAtomTypeAndNucleus(inner[0], MathAtomType.Number, "2");

            var latex = MathListBuilder.MathListToString(list);

            Assert.Equal(@"\underline{2}", latex);
        }
Esempio n. 8
0
        public void TestPMatrix()
        {
            var input = @"\begin{pmatrix} x & y \\ z & w \end{pmatrix}";
            var list  = MathLists.FromString(input);

            Assert.Single(list);
            var inner = list[0] as IMathInner;

            CheckAtomTypeAndNucleus(inner, MathAtomType.Inner, "");
            var innerList = inner.InnerList;

            CheckAtomTypeAndNucleus(inner.LeftBoundary, MathAtomType.Boundary, "(");
            CheckAtomTypeAndNucleus(inner.RightBoundary, MathAtomType.Boundary, ")");
            Assert.Single(innerList);
            var table = innerList[0] as IMathTable;

            CheckAtomTypeAndNucleus(table, MathAtomType.Table, "");
            Assert.Equal("matrix", table.Environment);
            Assert.Equal(0, table.InterRowAdditionalSpacing);
            Assert.Equal(18, table.InterColumnSpacing);
            Assert.Equal(2, table.NRows);
            Assert.Equal(2, table.NColumns);

            for (int i = 0; i < 2; i++)
            {
                var alignment = table.GetAlignment(i);
                Assert.Equal(ColumnAlignment.Center, alignment);
                for (int j = 0; j < 2; j++)
                {
                    var cell = table.Cells[j][i];
                    Assert.Equal(2, cell.Count);
                    var style = cell[0] as IStyle;
                    Assert.Equal(MathAtomType.Style, style.AtomType);
                    Assert.Equal(LineStyle.Text, style.LineStyle);

                    var atom = cell[1];
                    Assert.Equal(MathAtomType.Variable, atom.AtomType);
                }
            }
            var latex = MathListBuilder.MathListToString(list);

            Assert.Equal(@"\left( \begin{matrix}x&y\\ z&w\end{matrix}\right) ", latex);
        }
Esempio n. 9
0
        public void TestSqrt()
        {
            var input = @"\sqrt2";
            var list  = MathLists.FromString(input);

            Assert.Single(list);
            var radical = list[0] as Radical;

            CheckAtomTypeAndNucleus(radical, MathAtomType.Radical, "");

            var radicand = radical.Radicand;

            Assert.Single(radicand);
            CheckAtomTypeAndNucleus(radicand[0], MathAtomType.Number, "2");

            var latex = MathListBuilder.MathListToString(list);

            Assert.Equal(@"\sqrt{2}", latex);
        }
Esempio n. 10
0
        public void TestCustom()
        {
            var input   = @"\lcm(a,b)";
            var builder = new MathListBuilder(input);
            var list    = builder.Build();

            Assert.Null(list);
            Assert.NotNull(builder.Error);

            MathAtoms.AddLatexSymbol("lcm", MathAtoms.Operator("lcm", false));
            var builder2 = new MathListBuilder(input);
            var list2    = builder2.Build();

            ExpandGroups(list2);
            CheckAtomTypes(list2, MathAtomType.LargeOperator, MathAtomType.Open,
                           MathAtomType.Variable, MathAtomType.Punctuation, MathAtomType.Variable,
                           MathAtomType.Close);
            var latex = MathListBuilder.MathListToString(list2);

            Assert.Equal(@"\lcm (a,b)", latex);
        }
Esempio n. 11
0
        public void TestMathStyle()
        {
            var input = @"\textstyle y \scriptstyle x";
            var list  = MathLists.FromString(input);

            Assert.Equal(4, list.Count);

            var style = list[0] as IStyle;

            CheckAtomTypeAndNucleus(style, MathAtomType.Style, "");
            Assert.Equal(LineStyle.Text, style.LineStyle);

            var style2 = list[2] as IStyle;

            CheckAtomTypeAndNucleus(style2, MathAtomType.Style, "");
            Assert.Equal(LineStyle.Script, style2.LineStyle);

            var latex = MathListBuilder.MathListToString(list);

            Assert.Equal(@"\textstyle y\scriptstyle x", latex);
        }
Esempio n. 12
0
        public void TestBinomial()
        {
            var input = @"\binom{n}{k}";
            var list  = MathLists.FromString(input);

            Assert.Single(list);
            var fraction = list[0] as IFraction;

            CheckAtomTypeAndNucleus(fraction, MathAtomType.Fraction, "");

            Assert.False(fraction.HasRule);
            Assert.Equal("(", fraction.LeftDelimiter);
            Assert.Equal(")", fraction.RightDelimiter);

            Assert.Single(fraction.Numerator);
            CheckAtomTypeAndNucleus(fraction.Numerator[0], MathAtomType.Variable, "n");
            Assert.Single(fraction.Denominator);
            CheckAtomTypeAndNucleus(fraction.Denominator[0], MathAtomType.Variable, "k");

            var latex = MathListBuilder.MathListToString(list);

            Assert.Equal(@"{n \choose k}", latex);
        }
Esempio n. 13
0
        public void TestAtop()
        {
            var input = @"1 \atop c";
            var list  = MathLists.FromString(input);

            Assert.Single(list);
            var fraction = list[0] as Fraction;

            CheckAtomTypeAndNucleus(fraction, MathAtomType.Fraction, "");
            Assert.False(fraction.HasRule);
            Assert.Null(fraction.LeftDelimiter);
            Assert.Null(fraction.RightDelimiter);

            Assert.Single(fraction.Numerator);
            CheckAtomTypeAndNucleus(fraction.Numerator[0], MathAtomType.Number, "1");

            Assert.Single(fraction.Denominator);
            CheckAtomTypeAndNucleus(fraction.Denominator[0], MathAtomType.Variable, "c");

            var latex = MathListBuilder.MathListToString(list);

            Assert.Equal(@"{1 \atop c}", latex);
        }
Esempio n. 14
0
        public void TestDisplayLines(string input)
        {
            var list = MathLists.FromString(input);

            Assert.Single(list);
            var table = list[0] as IMathTable;

            CheckAtomTypeAndNucleus(table, MathAtomType.Table, "");
            Assert.Equal(1, table.InterRowAdditionalSpacing);
            Assert.Equal(0, table.InterColumnSpacing);
            Assert.Equal(2, table.NRows);
            Assert.Equal(1, table.NColumns);
            Assert.Equal(ColumnAlignment.Center, table.GetAlignment(0));
            for (int j = 0; j < 2; j++)
            {
                var cell = table.Cells[j][0];
                Assert.Single(cell);
                Assert.Equal(MathAtomType.Variable, cell[0].AtomType);
            }
            var latex = MathListBuilder.MathListToString(list);

            Assert.Equal(input, latex);
        }
Esempio n. 15
0
        public void TestEqAlign(string input)
        {
            var list = MathLists.FromString(input);

            Assert.Single(list);
            var table = list[0] as IMathTable;

            CheckAtomTypeAndNucleus(table, MathAtomType.Table, "");
            Assert.Equal(1, table.InterRowAdditionalSpacing);
            Assert.Equal(0, table.InterColumnSpacing);
            Assert.Equal(2, table.NRows);
            Assert.Equal(2, table.NColumns);
            for (int i = 0; i < 2; i++)
            {
                var alignment = table.GetAlignment(i);
                Assert.Equal(i == 0 ? ColumnAlignment.Right : ColumnAlignment.Left, alignment);
                for (int j = 0; j < 2; j++)
                {
                    var cell = table.Cells[j][i];
                    if (i == 0)
                    {
                        Assert.Single(cell);
                        Assert.Equal(MathAtomType.Variable, cell[0].AtomType);
                    }
                    else
                    {
                        Assert.Equal(2, cell.Count);
                        Assert.Equal(MathAtomType.Ordinary, cell[0].AtomType);
                        Assert.Equal(MathAtomType.Variable, cell[1].AtomType);
                    }
                }
            }
            var latex = MathListBuilder.MathListToString(list);

            Assert.Equal(input, latex);
        }
Esempio n. 16
0
        public void TestFontOneCharacterInside()
        {
            var input = @"\sqrt \mathrm x y";
            var list  = MathLists.FromString(input);

            Assert.Equal(2, list.Count);

            var radical = list[0] as IRadical;

            CheckAtomTypeAndNucleus(radical, MathAtomType.Radical, "");

            var sublist = radical.Radicand;
            var atom    = sublist[0];

            CheckAtomTypeAndNucleus(atom, MathAtomType.Variable, "x");
            Assert.Equal(FontStyle.Roman, atom.FontStyle);

            CheckAtomTypeAndNucleus(list[1], MathAtomType.Variable, "y");
            Assert.Equal(FontStyle.Default, list[1].FontStyle);

            var latex = MathListBuilder.MathListToString(list);

            Assert.Equal(@"\sqrt{\mathrm{x}}y", latex);
        }
Esempio n. 17
0
 public MathSource(IMathList mathList)
 {
     LaTeX        = MathListBuilder.MathListToString(mathList);
     MathList     = mathList;
     ErrorMessage = null;
 }