# modules/ttfsupport.js

    /**
     * @license
     * Licensed under the MIT License.
     * http://opensource.org/licenses/mit-license
     */

    import { jsPDF } from "../jspdf.js";
    import { atob } from "../libs/AtobBtoa.js";

    /**
     * @name ttfsupport
     * @module
     */
    (function(jsPDF) {
      "use strict";

      var binaryStringToUint8Array = function(binary_string) {
        var len = binary_string.length;
        var bytes = new Uint8Array(len);
        for (var i = 0; i < len; i++) {
          bytes[i] = binary_string.charCodeAt(i);
        }
        return bytes;
      };

      var addFont = function(font, file) {
        // eslint-disable-next-line no-control-regex
        if (/^\x00\x01\x00\x00/.test(file)) {
          file = binaryStringToUint8Array(file);
        } else {
          file = binaryStringToUint8Array(atob(file));
        }
        font.metadata = jsPDF.API.TTFFont.open(file);
        font.metadata.Unicode = font.metadata.Unicode || {
          encoding: {},
          kerning: {},
          widths: []
        };
        font.metadata.glyIdsUsed = [0];
      };

      jsPDF.API.events.push([
        "addFont",
        function(data) {
          var file = undefined;
          var font = data.font;
          var instance = data.instance;
          if (font.isStandardFont) {
            return;
          }
          if (typeof instance !== "undefined") {
            if (instance.existsFileInVFS(font.postScriptName) === false) {
              file = instance.loadFile(font.postScriptName);
            } else {
              file = instance.getFileFromVFS(font.postScriptName);
            }
            if (typeof file !== "string") {
              throw new Error(
                "Font is not stored as string-data in vFS, import fonts or remove declaration doc.addFont('" +
                  font.postScriptName +
                  "')."
              );
            }
            addFont(font, file);
          } else {
            throw new Error(
              "Font does not exist in vFS, import fonts or remove declaration doc.addFont('" +
                font.postScriptName +
                "')."
            );
          }
        }
      ]); // end of adding event handler
    })(jsPDF);