docs: def chars(self, font, block):
          """
          Analyses characters in single font or all fonts.
          """
          if font:
              font_files = self._getFont(font)
          else:
              font_files = fc.query()
          code_points = self._getFontChars(font_files)
  
          if not block:
              blocks = all_blocks
              ranges_column = map(itemgetter(3), blocks)
              overlapped = Ranges(code_points).getOverlappedList(ranges_column)
          else:
              blocks = [block]
              overlapped = [Ranges(code_points).getOverlapped(block[3])]
  
          if self._display['group']:
              char_count = block_count = 0
              for i, block in enumerate(blocks):
                  o_count = len(overlapped[i])
                  if o_count:
                      block_count += 1
                      char_count += o_count
                      total = sum(len(r) for r in block[3])
                      percent = 0 if total == 0 else o_count / total
                      print("{0:>6}  {1:47} {2:>4.0%} ({3}/{4})".format(block[0], block[2], percent, o_count, total))
                      if self._display['list']:
                          for point in overlapped[i]:
                              self._charInfo(point, padding=9)
              self._charSummary(char_count, block_count)
          else:
              for point in code_points:
                  self._charInfo(point, padding=7)
              self._charSummary(len(code_points))