docstr: Initialize a FontBuilder instance.
  
  If the `font` argument is not given, a new `TTFont` will be
  constructed, and `unitsPerEm` must be given. If `isTTF` is True,
  the font will be a glyf-based TTF; if `isTTF` is False it will be
  a CFF-based OTF.
  
  The `glyphDataFormat` argument corresponds to the `head` table field
  that defines the format of the TrueType `glyf` table (default=0).
  TrueType glyphs historically can only contain quadratic splines and static
  components, but there's a proposal to add support for cubic Bezier curves as well
  as variable composites/components at
  https://github.com/harfbuzz/boring-expansion-spec/blob/main/glyf1.md
  You can experiment with the new features by setting `glyphDataFormat` to 1.
  A ValueError is raised if `glyphDataFormat` is left at 0 but glyphs are added
  that contain cubic splines or varcomposites. This is to prevent accidentally
  creating fonts that are incompatible with existing TrueType implementations.
  
  If `font` is given, it must be a `TTFont` instance and `unitsPerEm`
  must _not_ be given. The `isTTF` and `glyphDataFormat` arguments will be ignored.
code: def __init__(
      self, unitsPerEm=None, font=None, isTTF=True, glyphDataFormat=0
  ):
      """Initialize a FontBuilder instance.
  
      If the `font` argument is not given, a new `TTFont` will be
      constructed, and `unitsPerEm` must be given. If `isTTF` is True,
      the font will be a glyf-based TTF; if `isTTF` is False it will be
      a CFF-based OTF.
  
      The `glyphDataFormat` argument corresponds to the `head` table field
      that defines the format of the TrueType `glyf` table (default=0).
      TrueType glyphs historically can only contain quadratic splines and static
      components, but there's a proposal to add support for cubic Bezier curves as well
      as variable composites/components at
      https://github.com/harfbuzz/boring-expansion-spec/blob/main/glyf1.md
      You can experiment with the new features by setting `glyphDataFormat` to 1.
      A ValueError is raised if `glyphDataFormat` is left at 0 but glyphs are added
      that contain cubic splines or varcomposites. This is to prevent accidentally
      creating fonts that are incompatible with existing TrueType implementations.
  
      If `font` is given, it must be a `TTFont` instance and `unitsPerEm`
      must _not_ be given. The `isTTF` and `glyphDataFormat` arguments will be ignored.
      """
      if font is None:
          self.font = TTFont(recalcTimestamp=False)
          self.isTTF = isTTF
          now = timestampNow()
          assert unitsPerEm is not None
          self.setupHead(
              unitsPerEm=unitsPerEm,
              created=now,
              modified=now,
              glyphDataFormat=glyphDataFormat,
          )
          self.setupMaxp()
      else:
          assert unitsPerEm is None
          self.font = font
          self.isTTF = "glyf" in font
  
imports: from .ttLib import TTFont, newTable
  from .ttLib.tables._c_m_a_p import cmap_classes
  from .ttLib.tables._g_l_y_f import flagCubic
  from .ttLib.tables.O_S_2f_2 import Panose
  from .misc.timeTools import timestampNow
  import struct
  from collections import OrderedDict
label_desc: Use image node_id 1 to create a new FontBuilder object from inherited base classes: object with example: obj = FontBuilder(unitsPerEm, font, isTTF, glyphDataFormat)