docs: private String parseHtmlFile(File file, Hashtable properties) throws CmsException {
  
          String parsedHtml = "";
          try {
  
              byte[] content = getFileBytes(file);
  
              // use the correct encoding to get the string from the file bytes
              String contentString = new String(content, m_inputEncoding);
              // escape the string to remove all special chars
              contentString = CmsEncoder.escapeNonAscii(contentString);
              // we must substitute all occurrences of "&#", otherwise tidy would remove them
              contentString = CmsStringUtil.substitute(contentString, "&#", "{_subst1_}");
              // we must substitute all occurrences of &lt; and &gt;  otherwise tidy would replace them with < and >
              contentString = CmsStringUtil.substitute(contentString, "&lt;", "{_subst2_}");
              contentString = CmsStringUtil.substitute(contentString, "&gt;", "{_subst3_}");
  
              // parse the content
              parsedHtml = m_htmlConverter.convertHTML(
                  file.getAbsolutePath(),
                  contentString,
                  m_startPattern,
                  m_endPattern,
                  properties);
              // resubstitute the converted HTML code
              parsedHtml = CmsStringUtil.substitute(parsedHtml, "{_subst1_}", "&#");
              parsedHtml = CmsStringUtil.substitute(parsedHtml, "{_subst2_}", "&lt;");
              parsedHtml = CmsStringUtil.substitute(parsedHtml, "{_subst3_}", "&gt;");
          } catch (Exception e) {
              CmsMessageContainer message = Messages.get().container(
                  Messages.ERR_HTMLIMPORT_PARSE_1,
                  file.getAbsolutePath());
              LOG.error(e.getLocalizedMessage(), e);
              throw new CmsImportExportException(message, e);
          }
          return parsedHtml;
      }