"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FontMetrics = void 0; var util_1 = require("../core/util"); var SAMPLE_TEXT = 'Hidden Text'; var FontMetrics = /** @class */ (function () { function FontMetrics(document) { this._data = {}; this._document = document; } FontMetrics.prototype.parseMetrics = function (fontFamily, fontSize) { var container = this._document.createElement('div'); var img = this._document.createElement('img'); var span = this._document.createElement('span'); var body = this._document.body; container.style.visibility = 'hidden'; container.style.fontFamily = fontFamily; container.style.fontSize = fontSize; container.style.margin = '0'; container.style.padding = '0'; container.style.whiteSpace = 'nowrap'; body.appendChild(container); img.src = util_1.SMALL_IMAGE; img.width = 1; img.height = 1; img.style.margin = '0'; img.style.padding = '0'; img.style.verticalAlign = 'baseline'; span.style.fontFamily = fontFamily; span.style.fontSize = fontSize; span.style.margin = '0'; span.style.padding = '0'; span.appendChild(this._document.createTextNode(SAMPLE_TEXT)); container.appendChild(span); container.appendChild(img); var baseline = img.offsetTop - span.offsetTop + 2; container.removeChild(span); container.appendChild(this._document.createTextNode(SAMPLE_TEXT)); container.style.lineHeight = 'normal'; img.style.verticalAlign = 'super'; var middle = img.offsetTop - container.offsetTop + 2; body.removeChild(container); return { baseline: baseline, middle: middle }; }; FontMetrics.prototype.getMetrics = function (fontFamily, fontSize) { var key = fontFamily + " " + fontSize; if (typeof this._data[key] === 'undefined') { this._data[key] = this.parseMetrics(fontFamily, fontSize); } return this._data[key]; }; return FontMetrics; }()); exports.FontMetrics = FontMetrics; //# sourceMappingURL=font-metrics.js.map