code: def _parse_optional(fh):
      """
      Parse the optional fields for kern pair data and composites
  
      return value is a (*kernDict*, *compositeDict*) which are the
      return values from :func:`_parse_kern_pairs`, and
      :func:`_parse_composites` if the data exists, or empty dicts
      otherwise
      """
      optional = {
          b"StartKernData": _parse_kern_pairs,
          b"StartComposites": _parse_composites,
      }
  
      d = {b"StartKernData": {}, b"StartComposites": {}}
      for line in fh:
          line = line.rstrip()
          if not line:
              continue
          key = line.split()[0]
  
          if key in optional:
              d[key] = optional[key](fh)
  
      l = (d[b"StartKernData"], d[b"StartComposites"])
      return l
  
imports: from __future__ import absolute_import, division, print_function, unicode_literals
  import six
  from six.moves import map
  import sys
  import re
  from ._mathtext_data import uni2type1
label_desc: Use image node_id 11 for calling a global function with example usage: _parse_optional(fh) and returns: l