docs: def breakLinesCJK(self, width):
          """Initially, the dumbest possible wrapping algorithm.
          Cannot handle font variations."""
  
          if self.debug:
              print (id(self), "breakLinesCJK")
  
          if not isinstance(width, (list, tuple)):
              maxWidths = [width]
          else:
              maxWidths = width
          style = self.style
  
          #for bullets, work out width and ensure we wrap the right amount onto line one
          _handleBulletWidth(self.bulletText, style, maxWidths)
          if len(self.frags) > 1:
              autoLeading = getattr(self, 'autoLeading', getattr(style, 'autoLeading', ''))
              calcBounds = autoLeading not in ('', 'off')
              return cjkFragSplit(self.frags, maxWidths, calcBounds, self.encoding)
  
          elif not len(self.frags):
              return ParaLines(kind=0, fontSize=style.fontSize, fontName=style.fontName,
                               textColor=style.textColor, lines=[], ascent=style.fontSize, descent=-0.2 * style.fontSize)
          f = self.frags[0]
          if 1 and hasattr(self, 'blPara') and getattr(self, '_splitpara', 0):
              #NB this is an utter hack that awaits the proper information
              #preserving splitting algorithm
              return f.clone(kind=0, lines=self.blPara.lines)
          lines = []
  
          self.height = 0
  
          f = self.frags[0]
  
          if hasattr(f, 'text'):
              text = f.text
          else:
              text = ''.join(getattr(f, 'words', []))
  
          from reportlab.lib.textsplit import wordSplit
  
          lines = wordSplit(text, maxWidths[0], f.fontName, f.fontSize)
          #the paragraph drawing routine assumes multiple frags per line, so we need an
          #extra list like this
          #  [space, [text]]
          #
          wrappedLines = [(sp, [line]) for (sp, line) in lines]
          return f.clone(kind=0, lines=wrappedLines, ascent=f.fontSize, descent=-0.2 * f.fontSize)