55 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
		
			
		
	
	
			55 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| 
								 | 
							
								"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
							 |