code: def split_given_spans(self, spans, sep=' '):
          
          N = len(spans)
          results = [{TEXT: text} for text in self.texts_from_spans(spans, sep=sep)]
          for elem in self:
              if isinstance(self[elem], list):
                  splits = divide_by_spans(self[elem], spans, translate=True, sep=sep)
                  for idx in range(N):
                      results[idx][elem] = splits[idx]
          return [Text(res) for res in results]
docs: Split the text into several pieces.
  
          Resulting texts have all the layers that are present in the text instance that is splitted.
          The elements are copied to resulting pieces that are covered by their spans.
          However, this can result in empty layers if no element of a splitted layer fits into
          a span of a particular output piece.
  
          The positions of layer elements that are copied are translated according to the container span,
          so they are consistent with returned text lengths.
  
          Parameters
          ----------
  
          spans: list of spans.
              The positions determining the regions that will end up as individual pieces.
              Spans themselves can be lists of spans, which denote multilayer-style text regions.
          sep: str
              The separator that is used to join together text pieces of multilayer spans.
  
          Returns
          -------
          list of Text
              One instance of text per span.