# 12/14/2003 - Jeff Grimmett (grimmtooth@softhome.net) # # o 2.5 compatability update. # def RestOfLine(sx, width, data, bool): if len(data) == 0 and sx == 0: return [('', bool)] if sx >= len(data): return [] return [(data[sx:sx+width], bool)] def Selection(SelectBegin,SelectEnd, sx, width, line, data): if SelectEnd is None or SelectBegin is None: return RestOfLine(sx, width, data, False) (bRow, bCol) = SelectBegin (eRow, eCol) = SelectEnd if (eRow < bRow): (bRow, bCol) = SelectEnd (eRow, eCol) = SelectBegin if (line < bRow or eRow < line): return RestOfLine(sx, width, data, False) if (bRow < line and line < eRow): return RestOfLine(sx, width, data, True) if (bRow == eRow) and (eCol < bCol): (bCol, eCol) = (eCol, bCol) # selection either starts or ends on this line end = min(sx+width, len(data)) if (bRow < line): bCol = 0 if (line < eRow): eCol = end pieces = [] if (sx < bCol): if bCol <= end: pieces += [(data[sx:bCol], False)] else: return [(data[sx:end], False)] pieces += [(data[max(bCol,sx):min(eCol,end)], True)] if (eCol < end): pieces += [(data[eCol:end], False)] return pieces