class_docstr: For producing HTML side by side comparison with change highlights.
  
  This class can be used to create an HTML table (or a complete HTML file
  containing the table) showing a side by side, line by line comparison
  of text with inter-line and intra-line change highlights.  The table can
  be generated in either full or contextual difference mode.
  
  The following methods are provided for HTML generation:
  
  make_table -- generates HTML for a single side by side table
  make_file -- generates complete HTML file with a single side by side table
  
  See tools/scripts/diff.py for an example usage of this class.
docstr: Returns HTML table of side by side comparison with change highlights
  
  Arguments:
  fromlines -- list of "from" lines
  tolines -- list of "to" lines
  fromdesc -- "from" file column header string
  todesc -- "to" file column header string
  context -- set to True for contextual differences (defaults to False
      which shows full differences).
  numlines -- number of context lines.  When context is set True,
      controls number of lines displayed before and after the change.
      When context is False, controls the number of lines to place
      the "next" link anchors before the next change (so click of
      "next" link jumps to just before the change).
docstr_tok: ["Returns","HTML","table","of","side","by","side","comparison","with","change","highlights","Arguments",":","fromlines","--","list","of","``","from","''","lines","tolines","--","list","of","``","to","''","lines","fromdesc","--","``","from","''","file","column","header","string","todesc","--","``","to","''","file","column","header","string","context","--","set","to","True","for","contextual","differences","(","defaults","to","False","which","shows","full","differences",")",".","numlines","--","number","of","context","lines",".","When","context","is","set","True",",","controls","number","of","lines","displayed","before","and","after","the","change",".","When","context","is","False",",","controls","the","number","of","lines","to","place","the","``","next","''","link","anchors","before","the","next","change","(","so","click","of","``","next","''","link","jumps","to","just","before","the","change",")","."]
code: def make_table(
      self,
      fromlines,
      tolines,
      fromdesc="",
      todesc="",
      context=False,
      numlines=5,
  ):
      """Returns HTML table of side by side comparison with change highlights
  
      Arguments:
      fromlines -- list of "from" lines
      tolines -- list of "to" lines
      fromdesc -- "from" file column header string
      todesc -- "to" file column header string
      context -- set to True for contextual differences (defaults to False
          which shows full differences).
      numlines -- number of context lines.  When context is set True,
          controls number of lines displayed before and after the change.
          When context is False, controls the number of lines to place
          the "next" link anchors before the next change (so click of
          "next" link jumps to just before the change).
      """
  
      # make unique anchor prefixes so that multiple tables may exist
      # on the same page without conflict.
      self._make_prefix()
  
      # change tabs to spaces before it gets more difficult after we insert
      # markup
      fromlines, tolines = self._tab_newline_replace(fromlines, tolines)
  
      # create diffs iterator which generates side by side from/to data
      if context:
          context_lines = numlines
      else:
          context_lines = None
      diffs = _mdiff(
          fromlines,
          tolines,
          context_lines,
          linejunk=self._linejunk,
          charjunk=self._charjunk,
      )
  
      # set up iterator to wrap lines that exceed desired width
      if self._wrapcolumn:
          diffs = self._line_wrapper(diffs)
  
      # collect up from/to lines and flags into lists (also format the lines)
      fromlist, tolist, flaglist = self._collect_lines(diffs)
  
      # process change flags, generating middle column of next anchors/links
      (
          fromlist,
          tolist,
          flaglist,
          next_href,
          next_id,
      ) = self._convert_flags(
          fromlist, tolist, flaglist, context, numlines
      )
  
      s = []
      fmt = (
          '            <tr><td class="diff_next"%s>%s</td>%s'
          + '<td class="diff_next">%s</td>%s</tr>\n'
      )
      for i in range(len(flaglist)):
          if flaglist[i] is None:
              # mdiff yields None on separator lines skip the bogus ones
              # generated for the first line
              if i > 0:
                  s.append(
                      "        </tbody>        \n        <tbody>\n"
                  )
          else:
              s.append(
                  fmt
                  % (
                      next_id[i],
                      next_href[i],
                      fromlist[i],
                      next_href[i],
                      tolist[i],
                  )
              )
      if fromdesc or todesc:
          header_row = "<thead><tr>%s%s%s%s</tr></thead>" % (
              '<th class="diff_next"><br /></th>',
              '<th colspan="2" class="diff_header">%s</th>' % fromdesc,
              '<th class="diff_next"><br /></th>',
              '<th colspan="2" class="diff_header">%s</th>' % todesc,
          )
      else:
          header_row = ""
  
      table = self._table_template % dict(
          data_rows="".join(s),
          header_row=header_row,
          prefix=self._prefix[1],
      )
  
      return (
          table.replace("\0+", '<span class="diff_add">')
          .replace("\0-", '<span class="diff_sub">')
          .replace("\0^", '<span class="diff_chg">')
          .replace("\1", "</span>")
          .replace("\t", "&nbsp;")
      )
  
imports: from heapq import nlargest
  from collections import namedtuple
  from types import GenericAlias
  import re
label_desc: Use image node_id 10 for calling the HtmlDiff obj's underlying member method code with example usage: obj.make_table(fromlines, tolines, fromdesc, todesc, context, numlines) and returns: table