docs: def _illegal_character(c, ctx, message=''):
      """Raises an IonException upon encountering the given illegal character in the given context.
  
      Args:
          c (int|None): Ordinal of the illegal character.
          ctx (_HandlerContext):  Context in which the illegal character was encountered.
          message (Optional[str]): Additional information, as necessary.
  
      """
      container_type = ctx.container.ion_type is None and 'top-level' or ctx.container.ion_type.name
      value_type = ctx.ion_type is None and 'unknown' or ctx.ion_type.name
      if c is None:
          header = 'Illegal token'
      else:
          c = 'EOF' if BufferQueue.is_eof(c) else _chr(c)
          header = 'Illegal character %s' % (c,)
      raise IonException('%s at position %d in %s value contained in %s. %s Pending value: %s'
                         % (header, ctx.queue.position, value_type, container_type, message, ctx.value))