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: Builds list of text lines by splitting text lines at wrap point
  
  This function will determine if the input text line needs to be
  wrapped (split) into separate lines.  If so, the first wrap point
  will be determined and the first line appended to the output
  text line list.  This function is used recursively to handle
  the second part of the split line to further split it.
docstr_tok: ["Builds","list","of","text","lines","by","splitting","text","lines","at","wrap","point","This","function","will","determine","if","the","input","text","line","needs","to","be","wrapped","(","split",")","into","separate","lines",".","If","so",",","the","first","wrap","point","will","be","determined","and","the","first","line","appended","to","the","output","text","line","list",".","This","function","is","used","recursively","to","handle","the","second","part","of","the","split","line","to","further","split","it","."]
code: def _split_line(self, data_list, line_num, text):
      """Builds list of text lines by splitting text lines at wrap point
  
      This function will determine if the input text line needs to be
      wrapped (split) into separate lines.  If so, the first wrap point
      will be determined and the first line appended to the output
      text line list.  This function is used recursively to handle
      the second part of the split line to further split it.
      """
      # if blank line or context separator, just add it to the output list
      if not line_num:
          data_list.append((line_num, text))
          return
  
      # if line text doesn't need wrapping, just add it to the output list
      size = len(text)
      max = self._wrapcolumn
      if (size <= max) or ((size - (text.count("\0") * 3)) <= max):
          data_list.append((line_num, text))
          return
  
      # scan text looking for the wrap point, keeping track if the wrap
      # point is inside markers
      i = 0
      n = 0
      mark = ""
      while n < max and i < size:
          if text[i] == "\0":
              i += 1
              mark = text[i]
              i += 1
          elif text[i] == "\1":
              i += 1
              mark = ""
          else:
              i += 1
              n += 1
  
      # wrap point is inside text, break it up into separate lines
      line1 = text[:i]
      line2 = text[i:]
  
      # if wrap point is inside markers, place end marker at end of first
      # line and start marker at beginning of second line because each
      # line will have its own table tag markup around it.
      if mark:
          line1 = line1 + "\1"
          line2 = "\0" + mark + line2
  
      # tack on first line onto the output list
      data_list.append((line_num, line1))
  
      # use this routine again to wrap the remaining text
      self._split_line(data_list, ">", line2)
  
imports: from heapq import nlargest
  from collections import namedtuple
  from types import GenericAlias
  import re
label_desc: Use image node_id 4 for calling the HtmlDiff obj's underlying member method code with example usage: obj._split_line(data_list, line_num, text) without return types