public NodeDelimiter(string expression, DelimiterFactory factory, bool protectedCall) : base(expression) { if (factory == null && !protectedCall) throw new ArgumentNullException("factory"); this.factory = factory; }
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); }
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); }
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; }
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); }
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); }
public Box CreateBox(TexStyle style, float minHeight) { return(DelimiterFactory.CreateBox(Name, minHeight, style)); }
public NodeDelimiter(string expression, DelimiterFactory factory) : this(expression, factory, false) { }
public Box CreateBox(float minHeight) { return(DelimiterFactory.CreateBox(Name, minHeight)); }