Example #1
0
        public NodeDelimiter(string expression, DelimiterFactory factory, bool protectedCall)
            : base(expression)
        {
            if (factory == null && !protectedCall)
                throw new ArgumentNullException("factory");

            this.factory = factory;
        }
Example #2
0
        protected override Box CreateBoxCore(TexEnvironment environment)
        {
            var texFont = environment.MathFont;
            var style   = environment.Style;

            // Create box for base atom.
            var baseBox = this.BaseAtom.CreateBox(environment);

            // Create result box.
            var resultBox = new HorizontalBox();
            var axis      = texFont.GetAxisHeight(style);
            var delta     = Math.Max(baseBox.Height - axis, baseBox.Depth + axis);
            var minHeight = Math.Max((delta / 500) * delimeterFactor, 2 * delta - delimeterShortfall);

            // Create and add box for left delimeter.
            if (this.LeftDelimeter != null && this.LeftDelimeter.Name != SymbolAtom.EmptyDelimiterName)
            {
                var leftDelimeterBox = DelimiterFactory.CreateBox(this.LeftDelimeter.Name, minHeight, environment);
                leftDelimeterBox.Source = this.LeftDelimeter.Source;
                CentreBox(leftDelimeterBox, axis);
                resultBox.Add(leftDelimeterBox);
            }

            // add glueElement between left delimeter and base Atom, unless base Atom is whitespace.
            if (!(this.BaseAtom is SpaceAtom))
            {
                resultBox.Add(Glue.CreateBox(TexAtomType.Opening, this.BaseAtom.GetLeftType(), environment));
            }

            // add box for base Atom.
            resultBox.Add(baseBox);

            // add glueElement between right delimeter and base Atom, unless base Atom is whitespace.
            if (!(this.BaseAtom is SpaceAtom))
            {
                resultBox.Add(Glue.CreateBox(this.BaseAtom.GetRightType(), TexAtomType.Closing, environment));
            }

            // Create and add box for right delimeter.
            if (this.RightDelimeter != null && this.RightDelimeter.Name != SymbolAtom.EmptyDelimiterName)
            {
                var rightDelimeterBox = DelimiterFactory.CreateBox(this.RightDelimeter.Name, minHeight, environment);
                rightDelimeterBox.Source = this.RightDelimeter.Source;
                CentreBox(rightDelimeterBox, axis);
                resultBox.Add(rightDelimeterBox);
            }

            return(resultBox);
        }
Example #3
0
        protected override Box CreateBoxCore(TexEnvironment environment)
        {
            var resultBox   = new HorizontalBox();
            var innermatrix = this.BaseAtom == null ? StrutBox.Empty : this.BaseAtom.CreateBox(environment);
            var heightdiff  = innermatrix.Depth - innermatrix.Height;

            var leftparen = DelimiterFactory.CreateBox("lbrace", innermatrix.TotalHeight + heightdiff, environment);

            leftparen.Shift   = -innermatrix.Height;
            innermatrix.Shift = heightdiff / 2;
            resultBox.Add(leftparen);
            resultBox.Add(innermatrix);

            return(resultBox);
        }
Example #4
0
        public StringLiteral(Lexer lexer, int ts, int te, bool canLabel = false, State endState = null)
            : base(lexer, lexer.Position + 1)
        {
            var text = lexer.TextAt(ts, te);

            delimiter = DelimiterFactory.CreateDelimiter(this, text);

            if (canLabel)
            {
                delimiter.Features |= LiteralFeatures.Label;
            }

            this.endState = endState ?? lexer.EndState;

            BeginToken = lexer.GenerateToken(delimiter.BeginType, ts, te);
            BeginToken.Properties["has_interpolation"] = delimiter.HasInterpolation;
        }
Example #5
0
        protected override Box CreateBoxCore(TexEnvironment environment)
        {
            var resultBox   = new HorizontalBox();
            var innermatrix = this.BaseAtom == null ? StrutBox.Empty : this.BaseAtom.CreateBox(environment);
            var heightdiff  = innermatrix.Depth - innermatrix.Height;

            var leftparen = DelimiterFactory.CreateBox("Vert", innermatrix.TotalHeight, environment);

            leftparen.Shift = -innermatrix.Height + heightdiff;

            var rightparen = DelimiterFactory.CreateBox("Vert", innermatrix.TotalHeight, environment);

            rightparen.Shift = -innermatrix.Height + heightdiff;

            innermatrix.Shift = -(environment.MathFont.GetAxisHeight(environment.Style) - heightdiff) / 3;

            resultBox.Add(leftparen);
            resultBox.Add(innermatrix);
            resultBox.Add(rightparen);

            return(resultBox);
        }
Example #6
0
        protected override Box CreateBoxCore(TexEnvironment environment)
        {
            var resultBox  = new HorizontalBox();
            var leftmatrix = this.LeftBaseAtom == null ? StrutBox.Empty : this.LeftBaseAtom.CreateBox(environment);
            var heightdiff = leftmatrix.Depth - leftmatrix.Height;

            var vbarseparator = DelimiterFactory.CreateBox("vert", leftmatrix.TotalHeight, environment);

            vbarseparator.Shift = -leftmatrix.Height + heightdiff;

            var rightmatrix = this.RightBaseAtom == null ? StrutBox.Empty : this.RightBaseAtom.CreateBox(environment);
            var heightdiff1 = rightmatrix.Depth - rightmatrix.Height;//apparently, its the same as "heightdiff"

            leftmatrix.Shift  = -(environment.MathFont.GetAxisHeight(environment.Style) - heightdiff) / 3;
            rightmatrix.Shift = -(environment.MathFont.GetAxisHeight(environment.Style) - heightdiff1) / 3;

            resultBox.Add(leftmatrix);
            resultBox.Add(vbarseparator);

            resultBox.Add(rightmatrix);

            return(resultBox);
        }
Example #7
0
 public Box CreateBox(TexStyle style, float minHeight)
 {
     return(DelimiterFactory.CreateBox(Name, minHeight, style));
 }
Example #8
0
 public NodeDelimiter(string expression, DelimiterFactory factory)
     : this(expression, factory, false)
 {
 }
Example #9
0
 public Box CreateBox(float minHeight)
 {
     return(DelimiterFactory.CreateBox(Name, minHeight));
 }