code: private int _readChar ()
    {
      try
      {
        final int c = m_aReader.read ();
  
        if (m_bTrackPosition)
        {
          if (m_nBackupChars > 0)
          {
            // If previously a char was backed up, don't increase the position!
            m_nBackupChars--;
          }
          else
            m_aPos.updatePosition (c, m_nTabSize);
        }
        return c;
      }
      catch (final IOException ex)
      {
        return EOI;
      }
    }
docs: Must return int to differentiate between the whole char range (0-0xffff)
  and EOF (-1).
  
  @return the char read or {@link #EOI} (=-1) in case of EOF