- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
def getBoundTextRangeSL(leftBoundary, rightBoundary, pos, doc):
''' Get the range between any symbol specified in leftBoundary set and rightBoundary
Search starts from given cursor position...
NOTE `SL' suffix means Single Line -- i.e. when search, do not cross one line boundaries!
'''
if not doc.lineLength(pos.line()):
return KTextEditor.Range(pos, pos)
lineStr = doc.line(pos.line()) # Get the current line as string to analyse
found = False
cc = pos.column() # (pre)initialize 'current column'
# NOTE If cursor positioned at the end of a line, column()
# will be equal to the line length and lineStr[cc] will
# fail... So it must be handled before the `for' loop...
# And BTW, going to the line begin will start from a
# previous position -- it is why 'pos.column() - 1'
initialPos = min(len(lineStr) - 1, pos.column() - 1) # Let initial index be less than line length
for cc in range(initialPos, -1, -1): # Moving towards the line start
found = lineStr[cc] in leftBoundary # Check the current char for left boundary terminators
if found:
break # Break the loop if found smth
startPos = KTextEditor.Cursor(pos.line(), cc + int(found))
cc = pos.column() # Reset 'current column'
for cc in range(pos.column(), len(lineStr)): # Moving towards the line end
if lineStr[cc] in rightBoundary: # Check the current char for right boundary terminators
break # Break the loop if found smth
endPos = KTextEditor.Cursor(pos.line(), cc)
return KTextEditor.Range(startPos, endPos)
anonimb84a2f6fd141 27.07.2013 00:12 # 0
Elvenfighter 27.07.2013 00:57 # 0
anonimb84a2f6fd141 27.07.2013 01:07 # 0
anonimb84a2f6fd141 27.07.2013 05:44 # 0
Elvenfighter 27.07.2013 23:09 # 0
И главное -- этот весь говно-behavior бережно задокументирован.
wvxvw 27.07.2013 02:50 # 0
KTextEditor.Range(pos, pos) - поди пустую строку возвращает?
Elvenfighter 27.07.2013 23:13 # 0
Не совсем. Range -- это у них просто координаты начала и конца отрезка текста, чтоб достать текст по этому ренжу надо document.text(range)
Конкретно это -- отвечает за возврат невалидного Range, если курсор невалиден. И да, это еще и "оптимизация" на случай если строка под курсором - пустая.