Example #1
0
        private Box Enclosure_overbar(TexEnvironment environment, Box morphbox)
        {
            // Create result box.
            var defaultLineThickness = environment.MathFont.GetDefaultLineThickness(environment.Style);
            var resultBox            = new OverBar(environment, morphbox, 3 * defaultLineThickness, defaultLineThickness)
            {
                // Adjust height and depth of result box.
                Height = morphbox.Height + 5 * defaultLineThickness,
                Depth  = morphbox.Depth
            };

            return(resultBox);
        }
Example #2
0
        protected override Box CreateBoxCore(TexEnvironment environment)
        {
            // Create box for base atom, in cramped style.
            var baseBox = this.BaseAtom == null ? StrutBox.Empty : this.BaseAtom.CreateBox(environment.GetCrampedStyle());

            // Create result box.
            var defaultLineThickness = environment.MathFont.GetDefaultLineThickness(environment.Style);
            var resultBox            = new OverBar(environment, baseBox, 3 * defaultLineThickness, defaultLineThickness);

            // Adjust height and depth of result box.
            resultBox.Height = baseBox.Height + 5 * defaultLineThickness;
            resultBox.Depth  = baseBox.Depth;

            return(resultBox);
        }
Example #3
0
        public override Box CreateBox(TexStyle style)
        {
            // Create box for base atom, in cramped style.
            var baseBox = BaseAtom == null ? StrutBox.Empty : BaseAtom.CreateBox(TexUtility.GetCrampedStyle(style));

            // Create result box.
            var defaultLineThickness = TEXConfiguration.main.LineThickness * TexUtility.SizeFactor(style);
            var resultBox            = OverBar.Get(baseBox, 3 * defaultLineThickness, defaultLineThickness);

            // Adjust height and depth of result box.
            resultBox.height = baseBox.height + 5 * defaultLineThickness;
            resultBox.depth  = baseBox.depth;

            return(resultBox);
        }
Example #4
0
        public override Box CreateBox(TexEnvironment environment)
        {
            // Create box for base atom, in cramped style.
            var base_box = BaseAtom is null ? StrutBox.Empty : BaseAtom.CreateBox(environment.GetCrampedStyle());

            // Create result box.
            var default_line_thickness = environment.TexFont.GetDefaultLineThickness(environment.Style);
            var result_box             = new OverBar(base_box, 3 * default_line_thickness, default_line_thickness)
            {
                Height = base_box.Height + 5 * default_line_thickness,
                Depth  = base_box.Depth
            };

            // Adjust height and depth of result box.

            return(result_box);
        }
Example #5
0
        public override Box CreateBox()
        {
            // Create box for base atom, in cramped style.
            TexContext.Environment.Push(TexUtility.GetCrampedStyle());
            var baseBox = BaseAtom == null ? StrutBox.Empty : BaseAtom.CreateBox();

            TexContext.Environment.Pop();

            // Create result box.
            var defaultLineThickness = TEXConfiguration.main.LineThickness * TexContext.Scale;
            var resultBox            = OverBar.Get(baseBox, 3 * defaultLineThickness, defaultLineThickness);

            // Adjust height and depth of result box.
            resultBox.height = baseBox.height + 5 * defaultLineThickness;
            resultBox.depth  = baseBox.depth;

            return(resultBox);
        }
Example #6
0
        protected override Box CreateBoxCore(TexEnvironment environment)
        {
            var texFont = environment.MathFont;
            var style   = environment.Style;

            // Calculate minimum clearance amount.
            double clearance;
            var    defaultRuleThickness = texFont.GetDefaultLineThickness(style);

            if (style < TexStyle.Text)
            {
                clearance = texFont.GetXHeight(style, texFont.GetCharInfo(sqrtSymbol, style).Value.FontId);
            }
            else
            {
                clearance = defaultRuleThickness;
            }
            clearance = defaultRuleThickness + Math.Abs(clearance) / 4;

            // Create box for base atom, in cramped style.
            var baseBox = this.BaseAtom.CreateBox(environment.GetCrampedStyle());

            // Create box for radical sign.
            var totalHeight    = baseBox.Height + baseBox.Depth;
            var radicalSignBox = DelimiterFactory.CreateBox(sqrtSymbol, totalHeight + clearance + defaultRuleThickness,
                                                            environment, Source);

            radicalSignBox.Source = Source;

            // Add half of excess height to clearance.
            var delta = radicalSignBox.Depth - (totalHeight + clearance);

            clearance += delta / 2;

            // Create box for square-root containing base box.
            radicalSignBox.Shift = -(baseBox.Height + clearance);
            var overBar = new OverBar(environment, baseBox, clearance, radicalSignBox.Height);

            overBar.Shift = -(baseBox.Height + clearance + defaultRuleThickness);
            var radicalContainerBox = new HorizontalBox(radicalSignBox);

            radicalContainerBox.Add(overBar);

            // If atom is simple radical, just return square-root box.
            if (this.DegreeAtom == null)
            {
                return(radicalContainerBox);
            }

            // Atom is complex radical (nth-root).

            // Create box for root atom.
            var rootBox     = this.DegreeAtom.CreateBox(environment.GetRootStyle());
            var bottomShift = scale * (radicalContainerBox.Height + radicalContainerBox.Depth);

            rootBox.Shift = radicalContainerBox.Depth - rootBox.Depth - bottomShift;

            // Create result box.
            var resultBox = new HorizontalBox();

            // Add box for negative kern.
            var negativeKern = new SpaceAtom(null, TexUnit.Mu, -10, 0, 0).CreateBox(environment);
            var xPos         = rootBox.Width + negativeKern.Width;

            if (xPos < 0)
            {
                resultBox.Add(new StrutBox(-xPos, 0, 0, 0));
            }

            resultBox.Add(rootBox);
            resultBox.Add(negativeKern);
            resultBox.Add(radicalContainerBox);

            return(resultBox);
        }