class_docstr: This pen can be used to check if a glyph's contents (outlines plus
  components) have changed.
  
  Components are added as the original outline plus each composite's
  transformation.
  
  Example: You have some TrueType hinting code for a glyph which you want to
  compile. The hinting code specifies a hash value computed with HashPointPen
  that was valid for the glyph's outlines at the time the hinting code was
  written. Now you can calculate the hash for the glyph's current outlines to
  check if the outlines have changed, which would probably make the hinting
  code invalid.
  
  > glyph = ufo[name]
  > hash_pen = HashPointPen(glyph.width, ufo)
  > glyph.drawPoints(hash_pen)
  > ttdata = glyph.lib.get("public.truetype.instructions", None)
  > stored_hash = ttdata.get("id", None)  # The hash is stored in the "id" key
  > if stored_hash is None or stored_hash != hash_pen.hash:
  >    logger.error(f"Glyph hash mismatch, glyph '{name}' will have no instructions in font.")
  > else:
  >    # The hash values are identical, the outline has not changed.
  >    # Compile the hinting code ...
  >    pass
code: def endPath(self):
      self.data.append("|")
  
file_path: catboost/contrib/python/fonttools/fontTools/pens/hashPointPen.py
imports: import hashlib
  from fontTools.pens.basePen import MissingComponentError
  from fontTools.pens.pointPen import AbstractPointPen
label_desc: Use image node_id 4 for calling the HashPointPen obj's underlying member method code with example usage: obj.endPath() without return types