public void GetTextBold(string latex, IList <Element> container, Marker marker)
        {
            if (marker.Position <= latex.Length - 7)
            {
                if (latex.Substring(marker.Position, 7) == "\\textbf")
                {
                    marker.Position += 7;

                    var line = new MathematicsLine();

                    var subsection = GetSubsection(latex, container, marker);

                    if (subsection != null)
                    {
                        line.Elements = subsection.Item2;

                        marker.Position += subsection.Item1;

                        line.CascadeStyle("FontWeight", "Bold");

                        container.Add(line);
                    }
                }
            }
        }
Ejemplo n.º 2
0
        public void SetMathematicsLineSize5()
        {
            var mathematicsLine1 = new MathematicsLine();
            var number1          = new Number();
            var number2          = new Number();

            number1.Content           = "123";
            number1.OuterMargin.Left  = 3;
            number1.OuterMargin.Right = 5;

            number2.Content           = "45";
            number2.OuterMargin.Left  = 2;
            number2.OuterMargin.Right = 3;

            mathematicsLine1.Elements.Add(number1);
            mathematicsLine1.Elements.Add(number2);

            _typesetter.SetMathematicsLineSize(mathematicsLine1);

            Assert.AreEqual(16, mathematicsLine1.SizeOfContent.Width);
            Assert.AreEqual(1, mathematicsLine1.SizeOfContent.Height);
            Assert.AreEqual(16, mathematicsLine1.SizeIncludingInnerMargin.Width);
            Assert.AreEqual(1, mathematicsLine1.SizeIncludingInnerMargin.Height);
            Assert.AreEqual(16, mathematicsLine1.SizeIncludingBorder.Width);
            Assert.AreEqual(1, mathematicsLine1.SizeIncludingBorder.Height);
            Assert.AreEqual(16, mathematicsLine1.SizeIncludingOuterMargin.Width);
            Assert.AreEqual(1, mathematicsLine1.SizeIncludingOuterMargin.Height);
        }
        public void GetMathRoman(string latex, IList <Element> container, Marker marker)
        {
            if (marker.Position <= latex.Length - 7)
            {
                if (latex.Substring(marker.Position, 7) == "\\mathrm")
                {
                    marker.Position += 7;

                    var line = new MathematicsLine();

                    var subsection = GetSubsection(latex, container, marker);

                    if (subsection != null)
                    {
                        line.Elements = subsection.Item2;

                        marker.Position += subsection.Item1;

                        line.CascadeStyle("FontEmphasis", "None");

                        container.Add(line);
                    }
                }
            }
        }
        public void GetSquareRoot(string latex, IList <Element> container, Marker marker)
        {
            if (marker.Position < latex.Length - 8)
            {
                if (latex.Substring(marker.Position, 5) == "\\sqrt")
                {
                    marker.Position += 5;

                    var squareRoot = new SquareRoot();

                    var subsection1 = GetSubsection(latex, container, marker);

                    if (subsection1 != null)
                    {
                        var line1 = new MathematicsLine();

                        line1.Elements = subsection1.Item2;

                        squareRoot.InnerExpression = line1;

                        marker.Position += subsection1.Item1;

                        container.Add(squareRoot);
                    }
                }
            }
        }
        public void GetSubscript(string latex, IList <Element> container, Marker marker)
        {
            if (marker.Position >= latex.Length)
            {
                return;
            }

            if (latex.Substring(marker.Position, 1) == "_")
            {
                marker.Position += 1;

                var subsection = GetSubsection(latex, container, marker);

                if (subsection != null)
                {
                    var subscript = new Subscript();
                    var line      = new MathematicsLine();

                    subscript.Element1 = container.Last();

                    if (subsection.Item2.Count() == 1)
                    {
                        subscript.Element2 = subsection.Item2.First();
                    }
                    else
                    {
                        line.Elements      = subsection.Item2;
                        subscript.Element2 = line;
                    }

                    container.Remove(container.Last());
                    container.Add(subscript);

                    marker.Position += subsection.Item1;
                }
                else
                {
                    var elements = new List <Element>();

                    GetGreekLetter(latex, elements, marker);
                    GetIdentifier(latex, elements, marker);
                    GetNumber(latex, elements, marker);
                    GetOperator(latex, elements, marker);
                    GetMathRoman(latex, elements, marker);
                    GetPunctuationMark(latex, elements, marker);

                    if (elements.Any())
                    {
                        var subscript = new Subscript();

                        subscript.Element1 = container.Last();
                        subscript.Element2 = elements.First();

                        container.Remove(container.Last());
                        container.Add(subscript);
                    }
                }
            }
        }
        public void GetFraction(string latex, IList <Element> container, Marker marker)
        {
            if (marker.Position >= latex.Length || latex.Length - marker.Position < 5)
            {
                return;
            }

            if (latex.Substring(marker.Position, 5) == "\\frac")
            {
                marker.Position += 5;

                var fraction = new Fraction();

                var subsection1 = GetSubsection(latex, container, marker);

                if (subsection1 != null)
                {
                    var line1 = new MathematicsLine();

                    if (subsection1.Item2.Count() == 1)
                    {
                        fraction.Numerator = subsection1.Item2.First();
                    }
                    else
                    {
                        line1.Elements = subsection1.Item2;

                        fraction.Numerator = line1;
                    }

                    marker.Position += subsection1.Item1;
                }

                var subsection2 = GetSubsection(latex, container, marker);

                if (subsection2 != null)
                {
                    var line2 = new MathematicsLine();

                    if (subsection2.Item2.Count() == 1)
                    {
                        fraction.Denominator = subsection2.Item2.First();
                    }
                    else
                    {
                        line2.Elements = subsection2.Item2;

                        fraction.Denominator = line2;
                    }

                    marker.Position += subsection2.Item1;
                }

                if (fraction.Numerator != null && fraction.Denominator != null)
                {
                    container.Add(fraction);
                }
            }
        }
        public MathematicsLine ParseLaTeX(string latex)
        {
            var line = new MathematicsLine();

            line.Elements = ParseSubsection(latex);

            return(line);
        }
        public void GetBracketExpression(string latex, IList <Element> container, Marker marker)
        {
            if (marker.Position < latex.Length - 13)
            {
                if (latex.Substring(marker.Position, 6) == "\\left(")
                {
                    var n = 1;
                    var i = 0;
                    var j = marker.Position + 6;

                    while (j < latex.Length)
                    {
                        if (latex.Substring(j, 6) == "\\left(")
                        {
                            n += 1;
                            i += 6;
                            j += 6;
                        }
                        if (latex.Substring(j, 7) == "\\right)")
                        {
                            n -= 1;
                            i += 7;
                            j += 7;
                        }
                        else
                        {
                            i += 1;
                            j += 1;
                        }

                        if (n == 0)
                        {
                            break;
                        }
                    }

                    var t = latex.Substring(marker.Position + 6, i - 7);

                    var bracketExpression = new BracketExpression();
                    var mathematicsLine   = new MathematicsLine();

                    mathematicsLine.Elements          = ParseSubsection(t);
                    bracketExpression.InnerExpression = mathematicsLine;

                    container.Add(bracketExpression);

                    marker.Position += 6 + i;
                }
            }
        }
Ejemplo n.º 9
0
        public void SetMathematicsLineSize1()
        {
            var mathematicsLine1 = new MathematicsLine();

            _typesetter.SetMathematicsLineSize(mathematicsLine1);

            Assert.AreEqual(0, mathematicsLine1.SizeOfContent.Width);
            Assert.AreEqual(0, mathematicsLine1.SizeOfContent.Height);
            Assert.AreEqual(0, mathematicsLine1.SizeIncludingInnerMargin.Width);
            Assert.AreEqual(0, mathematicsLine1.SizeIncludingInnerMargin.Height);
            Assert.AreEqual(0, mathematicsLine1.SizeIncludingBorder.Width);
            Assert.AreEqual(0, mathematicsLine1.SizeIncludingBorder.Height);
            Assert.AreEqual(0, mathematicsLine1.SizeIncludingOuterMargin.Width);
            Assert.AreEqual(0, mathematicsLine1.SizeIncludingOuterMargin.Height);
        }