code: def cjkFragSplit(frags, maxWidths, calcBounds, encoding='utf8'):
      
  
      from reportlab.rl_config import _FUZZ
  
      U = []  # get a list of single glyphs with their widths etc etc
      for f in frags:
          text = f.text
          if not isinstance(text, unicode):
              text = text.decode(encoding)
          if text:
              U.extend([cjkU(t, f, encoding) for t in text])
          else:
              U.append(cjkU(text, f, encoding))
  
      lines = []
      widthUsed = lineStartPos = 0
      maxWidth = maxWidths[0]
  
      for i, u in enumerate(U):
          w = u.width
          widthUsed += w
          lineBreak = hasattr(u.frag, 'lineBreak')
          endLine = (widthUsed > maxWidth + _FUZZ and widthUsed > 0) or lineBreak
          if endLine:
              if lineBreak: continue
              extraSpace = maxWidth - widthUsed + w
              #This is the most important of the Japanese typography rules.
              #if next character cannot start a line, wrap it up to this line so it hangs
              #in the right margin. We won't do two or more though - that's unlikely and
              #would result in growing ugliness.
              nextChar = U[i]
              if nextChar in ALL_CANNOT_START:
                  extraSpace -= w
                  i += 1
              lines.append(makeCJKParaLine(U[lineStartPos:i], extraSpace, calcBounds))
              try:
                  maxWidth = maxWidths[len(lines)]
              except IndexError:
                  maxWidth = maxWidths[-1]  # use the last one
  
              lineStartPos = i
              widthUsed = w
              i -= 1
          #any characters left?
      if widthUsed > 0:
          lines.append(makeCJKParaLine(U[lineStartPos:], maxWidth - widthUsed, calcBounds))
  
      return ParaLines(kind=1, lines=lines)
docs: This attempts to be wordSplit for frags using the dumb algorithm