text: /*---------------------------------------------------------------------------------------------
   *  Copyright (c) Microsoft Corporation. All rights reserved.
   *  Licensed under the MIT License. See License.txt in the project root for license information.
   *--------------------------------------------------------------------------------------------*/
  import * as platform from '../../../base/common/platform.js';
  import { EditorZoom } from './editorZoom.js';
  /**
   * Determined from empirical observations.
   * @internal
   */
  const GOLDEN_LINE_HEIGHT_RATIO = platform.isMacintosh ? 1.5 : 1.35;
  /**
   * @internal
   */
  const MINIMUM_LINE_HEIGHT = 8;
  export class BareFontInfo {
      /**
       * @internal
       */
      constructor(opts) {
          this.zoomLevel = opts.zoomLevel;
          this.pixelRatio = opts.pixelRatio;
          this.fontFamily = String(opts.fontFamily);
          this.fontWeight = String(opts.fontWeight);
          this.fontSize = opts.fontSize;
          this.fontFeatureSettings = opts.fontFeatureSettings;
          this.lineHeight = opts.lineHeight | 0;
          this.letterSpacing = opts.letterSpacing;
      }
      /**
       * @internal
       */
      static createFromValidatedSettings(options, zoomLevel, pixelRatio, ignoreEditorZoom) {
          const fontFamily = options.get(37 /* fontFamily */);
          const fontWeight = options.get(41 /* fontWeight */);
          const fontSize = options.get(40 /* fontSize */);
          const fontFeatureSettings = options.get(39 /* fontLigatures */);
          const lineHeight = options.get(53 /* lineHeight */);
          const letterSpacing = options.get(50 /* letterSpacing */);
          return BareFontInfo._create(fontFamily, fontWeight, fontSize, fontFeatureSettings, lineHeight, letterSpacing, zoomLevel, pixelRatio, ignoreEditorZoom);
      }
      /**
       * @internal
       */
      static _create(fontFamily, fontWeight, fontSize, fontFeatureSettings, lineHeight, letterSpacing, zoomLevel, pixelRatio, ignoreEditorZoom) {
          if (lineHeight === 0) {
              lineHeight = Math.round(GOLDEN_LINE_HEIGHT_RATIO * fontSize);
          }
          else if (lineHeight < MINIMUM_LINE_HEIGHT) {
              lineHeight = MINIMUM_LINE_HEIGHT;
          }
          const editorZoomLevelMultiplier = 1 + (ignoreEditorZoom ? 0 : EditorZoom.getZoomLevel() * 0.1);
          fontSize *= editorZoomLevelMultiplier;
          lineHeight *= editorZoomLevelMultiplier;
          return new BareFontInfo({
              zoomLevel: zoomLevel,
              pixelRatio: pixelRatio,
              fontFamily: fontFamily,
              fontWeight: fontWeight,
              fontSize: fontSize,
              fontFeatureSettings: fontFeatureSettings,
              lineHeight: lineHeight,
              letterSpacing: letterSpacing
          });
      }
      /**
       * @internal
       */
      getId() {
          return this.zoomLevel + '-' + this.pixelRatio + '-' + this.fontFamily + '-' + this.fontWeight + '-' + this.fontSize + '-' + this.fontFeatureSettings + '-' + this.lineHeight + '-' + this.letterSpacing;
      }
      /**
       * @internal
       */
      getMassagedFontFamily() {
          if (/[,"']/.test(this.fontFamily)) {
              // Looks like the font family might be already escaped
              return this.fontFamily;
          }
          if (/[+ ]/.test(this.fontFamily)) {
              // Wrap a font family using + or <space> with quotes
              return `"${this.fontFamily}"`;
          }
          return this.fontFamily;
      }
  }
  // change this whenever `FontInfo` members are changed
  export const SERIALIZED_FONT_INFO_VERSION = 1;
  export class FontInfo extends BareFontInfo {
      /**
       * @internal
       */
      constructor(opts, isTrusted) {
          super(opts);
          this.version = SERIALIZED_FONT_INFO_VERSION;
          this.isTrusted = isTrusted;
          this.isMonospace = opts.isMonospace;
          this.typicalHalfwidthCharacterWidth = opts.typicalHalfwidthCharacterWidth;
          this.typicalFullwidthCharacterWidth = opts.typicalFullwidthCharacterWidth;
          this.canUseHalfwidthRightwardsArrow = opts.canUseHalfwidthRightwardsArrow;
          this.spaceWidth = opts.spaceWidth;
          this.middotWidth = opts.middotWidth;
          this.wsmiddotWidth = opts.wsmiddotWidth;
          this.maxDigitWidth = opts.maxDigitWidth;
      }
      /**
       * @internal
       */
      equals(other) {
          return (this.fontFamily === other.fontFamily
              && this.fontWeight === other.fontWeight
              && this.fontSize === other.fontSize
              && this.fontFeatureSettings === other.fontFeatureSettings
              && this.lineHeight === other.lineHeight
              && this.letterSpacing === other.letterSpacing
              && this.typicalHalfwidthCharacterWidth === other.typicalHalfwidthCharacterWidth
              && this.typicalFullwidthCharacterWidth === other.typicalFullwidthCharacterWidth
              && this.canUseHalfwidthRightwardsArrow === other.canUseHalfwidthRightwardsArrow
              && this.spaceWidth === other.spaceWidth
              && this.middotWidth === other.middotWidth
              && this.wsmiddotWidth === other.wsmiddotWidth
              && this.maxDigitWidth === other.maxDigitWidth);
      }
  }
  