import { __extends } from "tslib"; 
 | 
import { parseRichText, parsePlainText } from './helper/parseText.js'; 
 | 
import TSpan from './TSpan.js'; 
 | 
import { retrieve2, each, normalizeCssArray, trim, retrieve3, extend, keys, defaults } from '../core/util.js'; 
 | 
import { adjustTextX, adjustTextY } from '../contain/text.js'; 
 | 
import ZRImage from './Image.js'; 
 | 
import Rect from './shape/Rect.js'; 
 | 
import BoundingRect from '../core/BoundingRect.js'; 
 | 
import Displayable, { DEFAULT_COMMON_ANIMATION_PROPS } from './Displayable.js'; 
 | 
import { DEFAULT_FONT, DEFAULT_FONT_SIZE } from '../core/platform.js'; 
 | 
var DEFAULT_RICH_TEXT_COLOR = { 
 | 
    fill: '#000' 
 | 
}; 
 | 
var DEFAULT_STROKE_LINE_WIDTH = 2; 
 | 
export var DEFAULT_TEXT_ANIMATION_PROPS = { 
 | 
    style: defaults({ 
 | 
        fill: true, 
 | 
        stroke: true, 
 | 
        fillOpacity: true, 
 | 
        strokeOpacity: true, 
 | 
        lineWidth: true, 
 | 
        fontSize: true, 
 | 
        lineHeight: true, 
 | 
        width: true, 
 | 
        height: true, 
 | 
        textShadowColor: true, 
 | 
        textShadowBlur: true, 
 | 
        textShadowOffsetX: true, 
 | 
        textShadowOffsetY: true, 
 | 
        backgroundColor: true, 
 | 
        padding: true, 
 | 
        borderColor: true, 
 | 
        borderWidth: true, 
 | 
        borderRadius: true 
 | 
    }, DEFAULT_COMMON_ANIMATION_PROPS.style) 
 | 
}; 
 | 
var ZRText = (function (_super) { 
 | 
    __extends(ZRText, _super); 
 | 
    function ZRText(opts) { 
 | 
        var _this = _super.call(this) || this; 
 | 
        _this.type = 'text'; 
 | 
        _this._children = []; 
 | 
        _this._defaultStyle = DEFAULT_RICH_TEXT_COLOR; 
 | 
        _this.attr(opts); 
 | 
        return _this; 
 | 
    } 
 | 
    ZRText.prototype.childrenRef = function () { 
 | 
        return this._children; 
 | 
    }; 
 | 
    ZRText.prototype.update = function () { 
 | 
        _super.prototype.update.call(this); 
 | 
        if (this.styleChanged()) { 
 | 
            this._updateSubTexts(); 
 | 
        } 
 | 
        for (var i = 0; i < this._children.length; i++) { 
 | 
            var child = this._children[i]; 
 | 
            child.zlevel = this.zlevel; 
 | 
            child.z = this.z; 
 | 
            child.z2 = this.z2; 
 | 
            child.culling = this.culling; 
 | 
            child.cursor = this.cursor; 
 | 
            child.invisible = this.invisible; 
 | 
        } 
 | 
    }; 
 | 
    ZRText.prototype.updateTransform = function () { 
 | 
        var innerTransformable = this.innerTransformable; 
 | 
        if (innerTransformable) { 
 | 
            innerTransformable.updateTransform(); 
 | 
            if (innerTransformable.transform) { 
 | 
                this.transform = innerTransformable.transform; 
 | 
            } 
 | 
        } 
 | 
        else { 
 | 
            _super.prototype.updateTransform.call(this); 
 | 
        } 
 | 
    }; 
 | 
    ZRText.prototype.getLocalTransform = function (m) { 
 | 
        var innerTransformable = this.innerTransformable; 
 | 
        return innerTransformable 
 | 
            ? innerTransformable.getLocalTransform(m) 
 | 
            : _super.prototype.getLocalTransform.call(this, m); 
 | 
    }; 
 | 
    ZRText.prototype.getComputedTransform = function () { 
 | 
        if (this.__hostTarget) { 
 | 
            this.__hostTarget.getComputedTransform(); 
 | 
            this.__hostTarget.updateInnerText(true); 
 | 
        } 
 | 
        return _super.prototype.getComputedTransform.call(this); 
 | 
    }; 
 | 
    ZRText.prototype._updateSubTexts = function () { 
 | 
        this._childCursor = 0; 
 | 
        normalizeTextStyle(this.style); 
 | 
        this.style.rich 
 | 
            ? this._updateRichTexts() 
 | 
            : this._updatePlainTexts(); 
 | 
        this._children.length = this._childCursor; 
 | 
        this.styleUpdated(); 
 | 
    }; 
 | 
    ZRText.prototype.addSelfToZr = function (zr) { 
 | 
        _super.prototype.addSelfToZr.call(this, zr); 
 | 
        for (var i = 0; i < this._children.length; i++) { 
 | 
            this._children[i].__zr = zr; 
 | 
        } 
 | 
    }; 
 | 
    ZRText.prototype.removeSelfFromZr = function (zr) { 
 | 
        _super.prototype.removeSelfFromZr.call(this, zr); 
 | 
        for (var i = 0; i < this._children.length; i++) { 
 | 
            this._children[i].__zr = null; 
 | 
        } 
 | 
    }; 
 | 
    ZRText.prototype.getBoundingRect = function () { 
 | 
        if (this.styleChanged()) { 
 | 
            this._updateSubTexts(); 
 | 
        } 
 | 
        if (!this._rect) { 
 | 
            var tmpRect = new BoundingRect(0, 0, 0, 0); 
 | 
            var children = this._children; 
 | 
            var tmpMat = []; 
 | 
            var rect = null; 
 | 
            for (var i = 0; i < children.length; i++) { 
 | 
                var child = children[i]; 
 | 
                var childRect = child.getBoundingRect(); 
 | 
                var transform = child.getLocalTransform(tmpMat); 
 | 
                if (transform) { 
 | 
                    tmpRect.copy(childRect); 
 | 
                    tmpRect.applyTransform(transform); 
 | 
                    rect = rect || tmpRect.clone(); 
 | 
                    rect.union(tmpRect); 
 | 
                } 
 | 
                else { 
 | 
                    rect = rect || childRect.clone(); 
 | 
                    rect.union(childRect); 
 | 
                } 
 | 
            } 
 | 
            this._rect = rect || tmpRect; 
 | 
        } 
 | 
        return this._rect; 
 | 
    }; 
 | 
    ZRText.prototype.setDefaultTextStyle = function (defaultTextStyle) { 
 | 
        this._defaultStyle = defaultTextStyle || DEFAULT_RICH_TEXT_COLOR; 
 | 
    }; 
 | 
    ZRText.prototype.setTextContent = function (textContent) { 
 | 
        if (process.env.NODE_ENV !== 'production') { 
 | 
            throw new Error('Can\'t attach text on another text'); 
 | 
        } 
 | 
    }; 
 | 
    ZRText.prototype._mergeStyle = function (targetStyle, sourceStyle) { 
 | 
        if (!sourceStyle) { 
 | 
            return targetStyle; 
 | 
        } 
 | 
        var sourceRich = sourceStyle.rich; 
 | 
        var targetRich = targetStyle.rich || (sourceRich && {}); 
 | 
        extend(targetStyle, sourceStyle); 
 | 
        if (sourceRich && targetRich) { 
 | 
            this._mergeRich(targetRich, sourceRich); 
 | 
            targetStyle.rich = targetRich; 
 | 
        } 
 | 
        else if (targetRich) { 
 | 
            targetStyle.rich = targetRich; 
 | 
        } 
 | 
        return targetStyle; 
 | 
    }; 
 | 
    ZRText.prototype._mergeRich = function (targetRich, sourceRich) { 
 | 
        var richNames = keys(sourceRich); 
 | 
        for (var i = 0; i < richNames.length; i++) { 
 | 
            var richName = richNames[i]; 
 | 
            targetRich[richName] = targetRich[richName] || {}; 
 | 
            extend(targetRich[richName], sourceRich[richName]); 
 | 
        } 
 | 
    }; 
 | 
    ZRText.prototype.getAnimationStyleProps = function () { 
 | 
        return DEFAULT_TEXT_ANIMATION_PROPS; 
 | 
    }; 
 | 
    ZRText.prototype._getOrCreateChild = function (Ctor) { 
 | 
        var child = this._children[this._childCursor]; 
 | 
        if (!child || !(child instanceof Ctor)) { 
 | 
            child = new Ctor(); 
 | 
        } 
 | 
        this._children[this._childCursor++] = child; 
 | 
        child.__zr = this.__zr; 
 | 
        child.parent = this; 
 | 
        return child; 
 | 
    }; 
 | 
    ZRText.prototype._updatePlainTexts = function () { 
 | 
        var style = this.style; 
 | 
        var textFont = style.font || DEFAULT_FONT; 
 | 
        var textPadding = style.padding; 
 | 
        var text = getStyleText(style); 
 | 
        var contentBlock = parsePlainText(text, style); 
 | 
        var needDrawBg = needDrawBackground(style); 
 | 
        var bgColorDrawn = !!(style.backgroundColor); 
 | 
        var outerHeight = contentBlock.outerHeight; 
 | 
        var outerWidth = contentBlock.outerWidth; 
 | 
        var contentWidth = contentBlock.contentWidth; 
 | 
        var textLines = contentBlock.lines; 
 | 
        var lineHeight = contentBlock.lineHeight; 
 | 
        var defaultStyle = this._defaultStyle; 
 | 
        this.isTruncated = !!contentBlock.isTruncated; 
 | 
        var baseX = style.x || 0; 
 | 
        var baseY = style.y || 0; 
 | 
        var textAlign = style.align || defaultStyle.align || 'left'; 
 | 
        var verticalAlign = style.verticalAlign || defaultStyle.verticalAlign || 'top'; 
 | 
        var textX = baseX; 
 | 
        var textY = adjustTextY(baseY, contentBlock.contentHeight, verticalAlign); 
 | 
        if (needDrawBg || textPadding) { 
 | 
            var boxX = adjustTextX(baseX, outerWidth, textAlign); 
 | 
            var boxY = adjustTextY(baseY, outerHeight, verticalAlign); 
 | 
            needDrawBg && this._renderBackground(style, style, boxX, boxY, outerWidth, outerHeight); 
 | 
        } 
 | 
        textY += lineHeight / 2; 
 | 
        if (textPadding) { 
 | 
            textX = getTextXForPadding(baseX, textAlign, textPadding); 
 | 
            if (verticalAlign === 'top') { 
 | 
                textY += textPadding[0]; 
 | 
            } 
 | 
            else if (verticalAlign === 'bottom') { 
 | 
                textY -= textPadding[2]; 
 | 
            } 
 | 
        } 
 | 
        var defaultLineWidth = 0; 
 | 
        var useDefaultFill = false; 
 | 
        var textFill = getFill('fill' in style 
 | 
            ? style.fill 
 | 
            : (useDefaultFill = true, defaultStyle.fill)); 
 | 
        var textStroke = getStroke('stroke' in style 
 | 
            ? style.stroke 
 | 
            : (!bgColorDrawn 
 | 
                && (!defaultStyle.autoStroke || useDefaultFill)) 
 | 
                ? (defaultLineWidth = DEFAULT_STROKE_LINE_WIDTH, defaultStyle.stroke) 
 | 
                : null); 
 | 
        var hasShadow = style.textShadowBlur > 0; 
 | 
        var fixedBoundingRect = style.width != null 
 | 
            && (style.overflow === 'truncate' || style.overflow === 'break' || style.overflow === 'breakAll'); 
 | 
        var calculatedLineHeight = contentBlock.calculatedLineHeight; 
 | 
        for (var i = 0; i < textLines.length; i++) { 
 | 
            var el = this._getOrCreateChild(TSpan); 
 | 
            var subElStyle = el.createStyle(); 
 | 
            el.useStyle(subElStyle); 
 | 
            subElStyle.text = textLines[i]; 
 | 
            subElStyle.x = textX; 
 | 
            subElStyle.y = textY; 
 | 
            if (textAlign) { 
 | 
                subElStyle.textAlign = textAlign; 
 | 
            } 
 | 
            subElStyle.textBaseline = 'middle'; 
 | 
            subElStyle.opacity = style.opacity; 
 | 
            subElStyle.strokeFirst = true; 
 | 
            if (hasShadow) { 
 | 
                subElStyle.shadowBlur = style.textShadowBlur || 0; 
 | 
                subElStyle.shadowColor = style.textShadowColor || 'transparent'; 
 | 
                subElStyle.shadowOffsetX = style.textShadowOffsetX || 0; 
 | 
                subElStyle.shadowOffsetY = style.textShadowOffsetY || 0; 
 | 
            } 
 | 
            subElStyle.stroke = textStroke; 
 | 
            subElStyle.fill = textFill; 
 | 
            if (textStroke) { 
 | 
                subElStyle.lineWidth = style.lineWidth || defaultLineWidth; 
 | 
                subElStyle.lineDash = style.lineDash; 
 | 
                subElStyle.lineDashOffset = style.lineDashOffset || 0; 
 | 
            } 
 | 
            subElStyle.font = textFont; 
 | 
            setSeparateFont(subElStyle, style); 
 | 
            textY += lineHeight; 
 | 
            if (fixedBoundingRect) { 
 | 
                el.setBoundingRect(new BoundingRect(adjustTextX(subElStyle.x, contentWidth, subElStyle.textAlign), adjustTextY(subElStyle.y, calculatedLineHeight, subElStyle.textBaseline), contentWidth, calculatedLineHeight)); 
 | 
            } 
 | 
        } 
 | 
    }; 
 | 
    ZRText.prototype._updateRichTexts = function () { 
 | 
        var style = this.style; 
 | 
        var text = getStyleText(style); 
 | 
        var contentBlock = parseRichText(text, style); 
 | 
        var contentWidth = contentBlock.width; 
 | 
        var outerWidth = contentBlock.outerWidth; 
 | 
        var outerHeight = contentBlock.outerHeight; 
 | 
        var textPadding = style.padding; 
 | 
        var baseX = style.x || 0; 
 | 
        var baseY = style.y || 0; 
 | 
        var defaultStyle = this._defaultStyle; 
 | 
        var textAlign = style.align || defaultStyle.align; 
 | 
        var verticalAlign = style.verticalAlign || defaultStyle.verticalAlign; 
 | 
        this.isTruncated = !!contentBlock.isTruncated; 
 | 
        var boxX = adjustTextX(baseX, outerWidth, textAlign); 
 | 
        var boxY = adjustTextY(baseY, outerHeight, verticalAlign); 
 | 
        var xLeft = boxX; 
 | 
        var lineTop = boxY; 
 | 
        if (textPadding) { 
 | 
            xLeft += textPadding[3]; 
 | 
            lineTop += textPadding[0]; 
 | 
        } 
 | 
        var xRight = xLeft + contentWidth; 
 | 
        if (needDrawBackground(style)) { 
 | 
            this._renderBackground(style, style, boxX, boxY, outerWidth, outerHeight); 
 | 
        } 
 | 
        var bgColorDrawn = !!(style.backgroundColor); 
 | 
        for (var i = 0; i < contentBlock.lines.length; i++) { 
 | 
            var line = contentBlock.lines[i]; 
 | 
            var tokens = line.tokens; 
 | 
            var tokenCount = tokens.length; 
 | 
            var lineHeight = line.lineHeight; 
 | 
            var remainedWidth = line.width; 
 | 
            var leftIndex = 0; 
 | 
            var lineXLeft = xLeft; 
 | 
            var lineXRight = xRight; 
 | 
            var rightIndex = tokenCount - 1; 
 | 
            var token = void 0; 
 | 
            while (leftIndex < tokenCount 
 | 
                && (token = tokens[leftIndex], !token.align || token.align === 'left')) { 
 | 
                this._placeToken(token, style, lineHeight, lineTop, lineXLeft, 'left', bgColorDrawn); 
 | 
                remainedWidth -= token.width; 
 | 
                lineXLeft += token.width; 
 | 
                leftIndex++; 
 | 
            } 
 | 
            while (rightIndex >= 0 
 | 
                && (token = tokens[rightIndex], token.align === 'right')) { 
 | 
                this._placeToken(token, style, lineHeight, lineTop, lineXRight, 'right', bgColorDrawn); 
 | 
                remainedWidth -= token.width; 
 | 
                lineXRight -= token.width; 
 | 
                rightIndex--; 
 | 
            } 
 | 
            lineXLeft += (contentWidth - (lineXLeft - xLeft) - (xRight - lineXRight) - remainedWidth) / 2; 
 | 
            while (leftIndex <= rightIndex) { 
 | 
                token = tokens[leftIndex]; 
 | 
                this._placeToken(token, style, lineHeight, lineTop, lineXLeft + token.width / 2, 'center', bgColorDrawn); 
 | 
                lineXLeft += token.width; 
 | 
                leftIndex++; 
 | 
            } 
 | 
            lineTop += lineHeight; 
 | 
        } 
 | 
    }; 
 | 
    ZRText.prototype._placeToken = function (token, style, lineHeight, lineTop, x, textAlign, parentBgColorDrawn) { 
 | 
        var tokenStyle = style.rich[token.styleName] || {}; 
 | 
        tokenStyle.text = token.text; 
 | 
        var verticalAlign = token.verticalAlign; 
 | 
        var y = lineTop + lineHeight / 2; 
 | 
        if (verticalAlign === 'top') { 
 | 
            y = lineTop + token.height / 2; 
 | 
        } 
 | 
        else if (verticalAlign === 'bottom') { 
 | 
            y = lineTop + lineHeight - token.height / 2; 
 | 
        } 
 | 
        var needDrawBg = !token.isLineHolder && needDrawBackground(tokenStyle); 
 | 
        needDrawBg && this._renderBackground(tokenStyle, style, textAlign === 'right' 
 | 
            ? x - token.width 
 | 
            : textAlign === 'center' 
 | 
                ? x - token.width / 2 
 | 
                : x, y - token.height / 2, token.width, token.height); 
 | 
        var bgColorDrawn = !!tokenStyle.backgroundColor; 
 | 
        var textPadding = token.textPadding; 
 | 
        if (textPadding) { 
 | 
            x = getTextXForPadding(x, textAlign, textPadding); 
 | 
            y -= token.height / 2 - textPadding[0] - token.innerHeight / 2; 
 | 
        } 
 | 
        var el = this._getOrCreateChild(TSpan); 
 | 
        var subElStyle = el.createStyle(); 
 | 
        el.useStyle(subElStyle); 
 | 
        var defaultStyle = this._defaultStyle; 
 | 
        var useDefaultFill = false; 
 | 
        var defaultLineWidth = 0; 
 | 
        var textFill = getFill('fill' in tokenStyle ? tokenStyle.fill 
 | 
            : 'fill' in style ? style.fill 
 | 
                : (useDefaultFill = true, defaultStyle.fill)); 
 | 
        var textStroke = getStroke('stroke' in tokenStyle ? tokenStyle.stroke 
 | 
            : 'stroke' in style ? style.stroke 
 | 
                : (!bgColorDrawn 
 | 
                    && !parentBgColorDrawn 
 | 
                    && (!defaultStyle.autoStroke || useDefaultFill)) ? (defaultLineWidth = DEFAULT_STROKE_LINE_WIDTH, defaultStyle.stroke) 
 | 
                    : null); 
 | 
        var hasShadow = tokenStyle.textShadowBlur > 0 
 | 
            || style.textShadowBlur > 0; 
 | 
        subElStyle.text = token.text; 
 | 
        subElStyle.x = x; 
 | 
        subElStyle.y = y; 
 | 
        if (hasShadow) { 
 | 
            subElStyle.shadowBlur = tokenStyle.textShadowBlur || style.textShadowBlur || 0; 
 | 
            subElStyle.shadowColor = tokenStyle.textShadowColor || style.textShadowColor || 'transparent'; 
 | 
            subElStyle.shadowOffsetX = tokenStyle.textShadowOffsetX || style.textShadowOffsetX || 0; 
 | 
            subElStyle.shadowOffsetY = tokenStyle.textShadowOffsetY || style.textShadowOffsetY || 0; 
 | 
        } 
 | 
        subElStyle.textAlign = textAlign; 
 | 
        subElStyle.textBaseline = 'middle'; 
 | 
        subElStyle.font = token.font || DEFAULT_FONT; 
 | 
        subElStyle.opacity = retrieve3(tokenStyle.opacity, style.opacity, 1); 
 | 
        setSeparateFont(subElStyle, tokenStyle); 
 | 
        if (textStroke) { 
 | 
            subElStyle.lineWidth = retrieve3(tokenStyle.lineWidth, style.lineWidth, defaultLineWidth); 
 | 
            subElStyle.lineDash = retrieve2(tokenStyle.lineDash, style.lineDash); 
 | 
            subElStyle.lineDashOffset = style.lineDashOffset || 0; 
 | 
            subElStyle.stroke = textStroke; 
 | 
        } 
 | 
        if (textFill) { 
 | 
            subElStyle.fill = textFill; 
 | 
        } 
 | 
        var textWidth = token.contentWidth; 
 | 
        var textHeight = token.contentHeight; 
 | 
        el.setBoundingRect(new BoundingRect(adjustTextX(subElStyle.x, textWidth, subElStyle.textAlign), adjustTextY(subElStyle.y, textHeight, subElStyle.textBaseline), textWidth, textHeight)); 
 | 
    }; 
 | 
    ZRText.prototype._renderBackground = function (style, topStyle, x, y, width, height) { 
 | 
        var textBackgroundColor = style.backgroundColor; 
 | 
        var textBorderWidth = style.borderWidth; 
 | 
        var textBorderColor = style.borderColor; 
 | 
        var isImageBg = textBackgroundColor && textBackgroundColor.image; 
 | 
        var isPlainOrGradientBg = textBackgroundColor && !isImageBg; 
 | 
        var textBorderRadius = style.borderRadius; 
 | 
        var self = this; 
 | 
        var rectEl; 
 | 
        var imgEl; 
 | 
        if (isPlainOrGradientBg || style.lineHeight || (textBorderWidth && textBorderColor)) { 
 | 
            rectEl = this._getOrCreateChild(Rect); 
 | 
            rectEl.useStyle(rectEl.createStyle()); 
 | 
            rectEl.style.fill = null; 
 | 
            var rectShape = rectEl.shape; 
 | 
            rectShape.x = x; 
 | 
            rectShape.y = y; 
 | 
            rectShape.width = width; 
 | 
            rectShape.height = height; 
 | 
            rectShape.r = textBorderRadius; 
 | 
            rectEl.dirtyShape(); 
 | 
        } 
 | 
        if (isPlainOrGradientBg) { 
 | 
            var rectStyle = rectEl.style; 
 | 
            rectStyle.fill = textBackgroundColor || null; 
 | 
            rectStyle.fillOpacity = retrieve2(style.fillOpacity, 1); 
 | 
        } 
 | 
        else if (isImageBg) { 
 | 
            imgEl = this._getOrCreateChild(ZRImage); 
 | 
            imgEl.onload = function () { 
 | 
                self.dirtyStyle(); 
 | 
            }; 
 | 
            var imgStyle = imgEl.style; 
 | 
            imgStyle.image = textBackgroundColor.image; 
 | 
            imgStyle.x = x; 
 | 
            imgStyle.y = y; 
 | 
            imgStyle.width = width; 
 | 
            imgStyle.height = height; 
 | 
        } 
 | 
        if (textBorderWidth && textBorderColor) { 
 | 
            var rectStyle = rectEl.style; 
 | 
            rectStyle.lineWidth = textBorderWidth; 
 | 
            rectStyle.stroke = textBorderColor; 
 | 
            rectStyle.strokeOpacity = retrieve2(style.strokeOpacity, 1); 
 | 
            rectStyle.lineDash = style.borderDash; 
 | 
            rectStyle.lineDashOffset = style.borderDashOffset || 0; 
 | 
            rectEl.strokeContainThreshold = 0; 
 | 
            if (rectEl.hasFill() && rectEl.hasStroke()) { 
 | 
                rectStyle.strokeFirst = true; 
 | 
                rectStyle.lineWidth *= 2; 
 | 
            } 
 | 
        } 
 | 
        var commonStyle = (rectEl || imgEl).style; 
 | 
        commonStyle.shadowBlur = style.shadowBlur || 0; 
 | 
        commonStyle.shadowColor = style.shadowColor || 'transparent'; 
 | 
        commonStyle.shadowOffsetX = style.shadowOffsetX || 0; 
 | 
        commonStyle.shadowOffsetY = style.shadowOffsetY || 0; 
 | 
        commonStyle.opacity = retrieve3(style.opacity, topStyle.opacity, 1); 
 | 
    }; 
 | 
    ZRText.makeFont = function (style) { 
 | 
        var font = ''; 
 | 
        if (hasSeparateFont(style)) { 
 | 
            font = [ 
 | 
                style.fontStyle, 
 | 
                style.fontWeight, 
 | 
                parseFontSize(style.fontSize), 
 | 
                style.fontFamily || 'sans-serif' 
 | 
            ].join(' '); 
 | 
        } 
 | 
        return font && trim(font) || style.textFont || style.font; 
 | 
    }; 
 | 
    return ZRText; 
 | 
}(Displayable)); 
 | 
var VALID_TEXT_ALIGN = { left: true, right: 1, center: 1 }; 
 | 
var VALID_TEXT_VERTICAL_ALIGN = { top: 1, bottom: 1, middle: 1 }; 
 | 
var FONT_PARTS = ['fontStyle', 'fontWeight', 'fontSize', 'fontFamily']; 
 | 
export function parseFontSize(fontSize) { 
 | 
    if (typeof fontSize === 'string' 
 | 
        && (fontSize.indexOf('px') !== -1 
 | 
            || fontSize.indexOf('rem') !== -1 
 | 
            || fontSize.indexOf('em') !== -1)) { 
 | 
        return fontSize; 
 | 
    } 
 | 
    else if (!isNaN(+fontSize)) { 
 | 
        return fontSize + 'px'; 
 | 
    } 
 | 
    else { 
 | 
        return DEFAULT_FONT_SIZE + 'px'; 
 | 
    } 
 | 
} 
 | 
function setSeparateFont(targetStyle, sourceStyle) { 
 | 
    for (var i = 0; i < FONT_PARTS.length; i++) { 
 | 
        var fontProp = FONT_PARTS[i]; 
 | 
        var val = sourceStyle[fontProp]; 
 | 
        if (val != null) { 
 | 
            targetStyle[fontProp] = val; 
 | 
        } 
 | 
    } 
 | 
} 
 | 
export function hasSeparateFont(style) { 
 | 
    return style.fontSize != null || style.fontFamily || style.fontWeight; 
 | 
} 
 | 
export function normalizeTextStyle(style) { 
 | 
    normalizeStyle(style); 
 | 
    each(style.rich, normalizeStyle); 
 | 
    return style; 
 | 
} 
 | 
function normalizeStyle(style) { 
 | 
    if (style) { 
 | 
        style.font = ZRText.makeFont(style); 
 | 
        var textAlign = style.align; 
 | 
        textAlign === 'middle' && (textAlign = 'center'); 
 | 
        style.align = (textAlign == null || VALID_TEXT_ALIGN[textAlign]) ? textAlign : 'left'; 
 | 
        var verticalAlign = style.verticalAlign; 
 | 
        verticalAlign === 'center' && (verticalAlign = 'middle'); 
 | 
        style.verticalAlign = (verticalAlign == null || VALID_TEXT_VERTICAL_ALIGN[verticalAlign]) ? verticalAlign : 'top'; 
 | 
        var textPadding = style.padding; 
 | 
        if (textPadding) { 
 | 
            style.padding = normalizeCssArray(style.padding); 
 | 
        } 
 | 
    } 
 | 
} 
 | 
function getStroke(stroke, lineWidth) { 
 | 
    return (stroke == null || lineWidth <= 0 || stroke === 'transparent' || stroke === 'none') 
 | 
        ? null 
 | 
        : (stroke.image || stroke.colorStops) 
 | 
            ? '#000' 
 | 
            : stroke; 
 | 
} 
 | 
function getFill(fill) { 
 | 
    return (fill == null || fill === 'none') 
 | 
        ? null 
 | 
        : (fill.image || fill.colorStops) 
 | 
            ? '#000' 
 | 
            : fill; 
 | 
} 
 | 
function getTextXForPadding(x, textAlign, textPadding) { 
 | 
    return textAlign === 'right' 
 | 
        ? (x - textPadding[1]) 
 | 
        : textAlign === 'center' 
 | 
            ? (x + textPadding[3] / 2 - textPadding[1] / 2) 
 | 
            : (x + textPadding[3]); 
 | 
} 
 | 
function getStyleText(style) { 
 | 
    var text = style.text; 
 | 
    text != null && (text += ''); 
 | 
    return text; 
 | 
} 
 | 
function needDrawBackground(style) { 
 | 
    return !!(style.backgroundColor 
 | 
        || style.lineHeight 
 | 
        || (style.borderWidth && style.borderColor)); 
 | 
} 
 | 
export default ZRText; 
 |