code: def _parse_composites(fh):
      """
      Return a composites dictionary.  Keys are the names of the
      composites.  Values are a num parts list of composite information,
      with each element being a (*name*, *dx*, *dy*) tuple.  Thus a
      composites line reading:
  
        CC Aacute 2 ; PCC A 0 0 ; PCC acute 160 170 ;
  
      will be represented as::
  
        d['Aacute'] = [ ('A', 0, 0), ('acute', 160, 170) ]
  
      """
      d = {}
      for line in fh:
          line = line.rstrip()
          if not line:
              continue
          if line.startswith(b"EndComposites"):
              return d
          vals = line.split(b";")
          cc = vals[0].split()
          name, numParts = cc[1], _to_int(cc[2])
          pccParts = []
          for s in vals[1:-1]:
              pcc = s.split()
              name, dx, dy = (
                  pcc[1],
                  _to_float(pcc[2]),
                  _to_float(pcc[3]),
              )
              pccParts.append((name, dx, dy))
          d[name] = pccParts
  
      raise RuntimeError("Bad composites parse")
  
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 10 for calling a global function with example usage: _parse_composites(fh) and returns: d