docs: def com_google_fonts_check_family_naming_recommendations(ttFont):
    """Font follows the family naming recommendations?"""
    # See http://forum.fontlab.com/index.php?topic=313.0
    import re
    from fontbakery.utils import get_name_entry_strings
    bad_entries = []
  
    # <Postscript name> may contain only a-zA-Z0-9
    # and one hyphen
    bad_psname = re.compile("[^A-Za-z0-9-]")
    for string in get_name_entry_strings(ttFont,
                                         NameID.POSTSCRIPT_NAME):
      if bad_psname.search(string):
        bad_entries.append({
            'field':
            'PostScript Name',
            'value':
            string,
            'rec': ('May contain only a-zA-Z0-9'
                    ' characters and an hyphen.')
        })
      if string.count('-') > 1:
        bad_entries.append({
            'field': 'Postscript Name',
            'value': string,
            'rec': ('May contain not more'
                    ' than a single hyphen')
        })
  
    for string in get_name_entry_strings(ttFont,
                                         NameID.FULL_FONT_NAME):
      if len(string) >= 64:
        bad_entries.append({
            'field': 'Full Font Name',
            'value': string,
            'rec': 'exceeds max length (63)'
        })
  
    for string in get_name_entry_strings(ttFont,
                                         NameID.POSTSCRIPT_NAME):
      if len(string) >= 30:
        bad_entries.append({
            'field': 'PostScript Name',
            'value': string,
            'rec': 'exceeds max length (29)'
        })
  
    for string in get_name_entry_strings(ttFont,
                                         NameID.FONT_FAMILY_NAME):
      if len(string) >= 32:
        bad_entries.append({
            'field': 'Family Name',
            'value': string,
            'rec': 'exceeds max length (31)'
        })
  
    for string in get_name_entry_strings(ttFont,
                                         NameID.FONT_SUBFAMILY_NAME):
      if len(string) >= 32:
        bad_entries.append({
            'field': 'Style Name',
            'value': string,
            'rec': 'exceeds max length (31)'
        })
  
    for string in get_name_entry_strings(ttFont,
                                         NameID.TYPOGRAPHIC_FAMILY_NAME):
      if len(string) >= 32:
        bad_entries.append({
            'field': 'OT Family Name',
            'value': string,
            'rec': 'exceeds max length (31)'
        })
  
    for string in get_name_entry_strings(ttFont,
                                         NameID.TYPOGRAPHIC_SUBFAMILY_NAME):
      if len(string) >= 32:
        bad_entries.append({
            'field': 'OT Style Name',
            'value': string,
            'rec': 'exceeds max length (31)'
        })
  
    if len(bad_entries) > 0:
      table = "| Field | Value | Recommendation |\n"
      table += "|:----- |:----- |:-------------- |\n"
      for bad in bad_entries:
        table += "| {} | {} | {} |\n".format(bad["field"],
                                             bad["value"],
                                             bad["rec"])
      yield INFO, ("Font does not follow "
                   "some family naming recommendations:\n\n"
                   "{}").format(table)
    else:
      yield PASS, "Font follows the family naming recommendations."