def _parse_optional(fh):
optional = {<EOL>'<STR_LIT>' : _parse_kern_pairs,<EOL>'<STR_LIT>' :  _parse_composites,<EOL>}<EOL>d = {'<STR_LIT>':{}, '<STR_LIT>':{}}<EOL>while <NUM_LIT:1>:<EOL><INDENT>line = fh.readline()<EOL>if not line: break<EOL>line = line.rstrip()<EOL>if len(line)==<NUM_LIT:0>: continue<EOL>key = line.split()[<NUM_LIT:0>]<EOL>if key in optional: d[key] = optional[key](fh)<EOL><DEDENT>l = ( d['<STR_LIT>'], d['<STR_LIT>'] )<EOL>return l<EOL>
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