':type closures: list of CaperClosure
:rtype: list of CaperClosure'

def _fragment_split(self, closures):

    cur_position = 0
    cur = None
    def end_fragment(fragments, cur, cur_position):
        cur.position = cur_position
        cur.left = (fragments[(len(fragments) - 1)] if (len(fragments) > 0) else None)
        if cur.left:
            cur.left_sep = cur.left.right_sep
            cur.left.right = cur
        cur.right_sep = ch
        fragments.append(cur)
    for closure in closures:
        closure.fragments = []
        separator_buffer = ''
        for (x, ch) in enumerate(self._clean_closure(closure.value)):
            if (not cur):
                cur = CaperFragment(closure)
            if (ch in FRAGMENT_SEPARATORS):
                if cur.value:
                    separator_buffer = ''
                separator_buffer += ch
                if (cur.value or (not closure.fragments)):
                    end_fragment(closure.fragments, cur, cur_position)
                elif (len(separator_buffer) > 1):
                    cur.value = separator_buffer.strip()
                    if cur.value:
                        end_fragment(closure.fragments, cur, cur_position)
                    separator_buffer = ''
                cur = None
                cur_position += 1
            else:
                cur.value += ch
        if (cur and cur.value):
            end_fragment(closure.fragments, cur, cur_position)
            cur_position = 0
            cur = None
    return closures
