{"version":3,"sources":["jsdelivr-header.js","/npm/opentype-layout@1.1.0/index.js"],"names":[],"mappings":"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","file":"/npm/opentype-layout@1.1.0/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.19.2.\n * Original file: /npm/opentype-layout@1.1.0/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","var defined = require('defined');\nvar wordWrapper = require('word-wrapper');\nvar assign = require('object-assign');\n\n// A default 'line-height' according to Chrome/FF/Safari (Jun 2016)\nvar DEFAULT_LINE_HEIGHT = 1.175;\n\nmodule.exports = function (font, text, opt) {\n  if (!font) throw new TypeError('Must specify a font from Opentype.js');\n  opt = opt || {};\n  text = text || '';\n  var align = defined(opt.align, 'left');\n  var letterSpacing = defined(opt.letterSpacing, 0);\n  var width = defined(opt.width, Infinity);\n\n  // apply word wrapping to text\n  var wrapOpts = assign({}, opt, {\n    measure: measure\n  });\n  var lines = wordWrapper.lines(text, wrapOpts);\n\n  // get max line width from all lines\n  var maxLineWidth = lines.reduce(function (prev, line) {\n    return Math.max(prev, line.width);\n  }, 0);\n\n  // As per CSS spec https://www.w3.org/TR/CSS2/visudet.html#line-height\n  var AD = Math.abs(font.ascender - font.descender);\n  var lineHeight = defined(opt.lineHeight, font.unitsPerEm * DEFAULT_LINE_HEIGHT); // in em units\n  var L = lineHeight - AD;\n\n  // Y position is based on CSS line height calculation\n  var x = 0;\n  var y = -font.ascender - L / 2;\n  var totalHeight = (AD + L) * lines.length;\n  var preferredWidth = isFinite(width) ? width : maxLineWidth;\n  var glyphs = [];\n  var lastGlyph = null;\n\n  // Layout by line\n  for (var lineIndex = 0; lineIndex < lines.length; lineIndex++) {\n    var line = lines[lineIndex];\n    var start = line.start;\n    var end = line.end;\n    var lineWidth = line.width;\n\n    // Layout by glyph\n    for (var j = start, c = 0; j < end; j++, c++) {\n      var char = text.charAt(j);\n      var glyph = getGlyph(font, char);\n\n      // TODO:\n      // Align center & right are off by a couple pixels, need to revisit.\n      if (j === start && align === 'right') {\n        x -= glyph.leftSideBearing;\n      }\n\n      // Apply kerning\n      if (lastGlyph) {\n        x += font.getKerningValue(glyph, lastGlyph) || 0;\n      }\n\n      // Align text\n      var tx = 0;\n      if (align === 'center') {\n        tx = (preferredWidth - lineWidth) / 2;\n      } else if (align === 'right') {\n        tx = preferredWidth - lineWidth;\n      }\n\n      // Store glyph data\n      glyphs.push({\n        position: [ x + tx, y ],\n        data: glyph,\n        index: j,\n        column: c,\n        row: lineIndex\n      });\n\n      // Advance forward\n      x += letterSpacing + getAdvance(glyph, char);\n      lastGlyph = glyph;\n    }\n\n    // Advance down\n    y -= lineHeight;\n    x = 0;\n  }\n\n  // Compute left & right values\n  var left = 0;\n  if (align === 'center') left = (preferredWidth - maxLineWidth) / 2;\n  else if (align === 'right') left = preferredWidth - maxLineWidth;\n  var right = Math.max(0, preferredWidth - maxLineWidth - left);\n\n  return {\n    glyphs: glyphs,\n    baseline: L / 2 + Math.abs(font.descender),\n    leading: L,\n    lines: lines,\n    lineHeight: lineHeight,\n    left: left,\n    right: right,\n    maxLineWidth: maxLineWidth,\n    width: preferredWidth,\n    height: totalHeight\n  };\n\n  function measure (text, start, end, width) {\n    return computeMetrics(font, text, start, end, width, letterSpacing);\n  }\n};\n\nfunction getRightSideBearing (glyph) {\n  var glyphWidth = (glyph.xMax || 0) - (glyph.xMin || 0);\n  var rsb = glyph.advanceWidth - glyph.leftSideBearing - glyphWidth;\n  return rsb;\n}\n\nfunction computeMetrics (font, text, start, end, width, letterSpacing) {\n  start = Math.max(0, defined(start, 0));\n  end = Math.min(defined(end, text.length), text.length);\n  width = defined(width, Infinity);\n  letterSpacing = defined(letterSpacing, 0);\n\n  var pen = 0;\n  var count = 0;\n  var curWidth = 0;\n\n  for (var i = start; i < end; i++) {\n    var char = text.charAt(i);\n\n    // Tab is treated as multiple space characters\n    var glyph = getGlyph(font, char);\n    ensureMetrics(glyph);\n\n    // determine kern value to next glyph\n    var kerning = 0;\n    if (i < end - 1) {\n      var nextGlyph = getGlyph(font, text.charAt(i + 1));\n      kerning += font.getKerningValue(glyph, nextGlyph);\n    }\n\n    // determine if the new pen or width is above our limit\n    var xMax = glyph.xMax || 0;\n    var xMin = glyph.xMin || 0;\n    var glyphWidth = xMax - xMin;\n    var rsb = getRightSideBearing(glyph);\n    var newWidth = pen + glyph.leftSideBearing + glyphWidth + rsb;\n    if (newWidth > width) {\n      break;\n    }\n\n    pen += letterSpacing + getAdvance(glyph, char) + kerning;\n    curWidth = newWidth;\n    count++;\n  }\n\n  return {\n    start: start,\n    end: start + count,\n    width: curWidth\n  };\n}\n\nfunction getGlyph (font, char) {\n  var isTab = char === '\\t';\n  return font.charToGlyph(isTab ? ' ' : char);\n}\n\nfunction getAdvance (glyph, char) {\n  // TODO: handle tab gracefully\n  return glyph.advanceWidth;\n}\n\nfunction ensureMetrics (glyph) {\n  // Opentype.js only builds its paths when the getter is accessed\n  // so we force it here.\n  return glyph.path;\n}\n"]}