You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
141 lines
3.4 KiB
141 lines
3.4 KiB
#!/usr/bin/env python3 |
|
# MIT License |
|
# |
|
# Copyright (c) 2022 Eugenio Parodi <ceccopierangiolieugenio AT googlemail DOT com> |
|
# |
|
# Permission is hereby granted, free of charge, to any person obtaining a copy |
|
# of this software and associated documentation files (the "Software"), to deal |
|
# in the Software without restriction, including without limitation the rights |
|
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
|
# copies of the Software, and to permit persons to whom the Software is |
|
# furnished to do so, subject to the following conditions: |
|
# |
|
# The above copyright notice and this permission notice shall be included in all |
|
# copies or substantial portions of the Software. |
|
# |
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
|
# SOFTWARE. |
|
|
|
import sys, os |
|
import argparse |
|
import queue |
|
import pickle |
|
import threading |
|
|
|
sys.path.append(os.path.join(sys.path[0],'../..')) |
|
|
|
import TermTk as ttk |
|
|
|
txt = '''xxxxxxxxxx |
|
xxxxxxxxxx |
|
xxxxxxxxxx |
|
xxxxxxxxxx |
|
xxxxxxxxxx |
|
xxxxxxxxxx |
|
xxxxxxxxxx |
|
xxxxxxxxxx |
|
''' |
|
|
|
def _setCursor(cur, prop): |
|
cur._properties = [] |
|
for p in prop: |
|
cur._properties.append( |
|
ttk.TTkTextCursor._prop( |
|
ttk.TTkTextCursor._CP(p[0][0], p[0][1]), |
|
ttk.TTkTextCursor._CP(p[1][0], p[1][1]))) |
|
cur._checkCursors() |
|
|
|
def test_demo1(): |
|
doc = ttk.TTkTextDocument(text=txt) |
|
cur = ttk.TTkTextCursor(document=doc) |
|
|
|
_setCursor(cur, [((0,0),(0,5))]) |
|
cbLine, cbRem, cbAdd = -1,-1,-1 |
|
|
|
def _cb(a,b,c): |
|
nonlocal cbLine, cbRem, cbAdd |
|
cbLine, cbRem, cbAdd = a,b,c |
|
|
|
doc.contentsChange.connect(_cb) |
|
cur.removeSelectedText() |
|
print(f"{cbLine=}, {cbRem=}, {cbAdd=}") |
|
|
|
assert cbLine == 0 |
|
assert cbRem == 1 |
|
assert cbAdd == 1 |
|
|
|
|
|
|
|
|
|
# __..__..__ |
|
# __..______ |
|
# __........ |
|
# .......... |
|
# ..__...... |
|
# .......... |
|
# ....______ |
|
# __........ |
|
# rem=8 add=5 |
|
|
|
def test_demo2(): |
|
doc = ttk.TTkTextDocument(text=txt) |
|
cur = ttk.TTkTextCursor(document=doc) |
|
|
|
_setCursor(cur, [ |
|
((0,0),(0,2)), |
|
((0,4),(0,6)), |
|
((0,8),(1,2)), |
|
((1,4),(2,2)), |
|
((4,2),(4,4)), |
|
((6,4),(7,2))]) |
|
cbLine, cbRem, cbAdd = -1,-1,-1 |
|
|
|
def _cb(a,b,c): |
|
nonlocal cbLine, cbRem, cbAdd |
|
cbLine, cbRem, cbAdd = a,b,c |
|
|
|
doc.contentsChange.connect(_cb) |
|
cur.removeSelectedText() |
|
print(f"{cbLine=}, {cbRem=}, {cbAdd=}") |
|
|
|
assert cbLine == 0 |
|
assert cbRem == 8 |
|
assert cbAdd == 5 |
|
|
|
# .......... |
|
# __..__..__ |
|
# __..______ |
|
# __........ |
|
# .......... |
|
# ..__...... |
|
# .......... |
|
# rem=5 add=3 |
|
|
|
def test_demo3(): |
|
doc = ttk.TTkTextDocument(text=txt) |
|
cur = ttk.TTkTextCursor(document=doc) |
|
|
|
_setCursor(cur, [ |
|
((1,0),(1,2)), |
|
((1,4),(1,6)), |
|
((1,8),(2,2)), |
|
((2,4),(3,2)), |
|
((5,2),(5,4))]) |
|
cbLine, cbRem, cbAdd = -1,-1,-1 |
|
|
|
def _cb(a,b,c): |
|
nonlocal cbLine, cbRem, cbAdd |
|
cbLine, cbRem, cbAdd = a,b,c |
|
|
|
doc.contentsChange.connect(_cb) |
|
cur.removeSelectedText() |
|
print(f"{cbLine=}, {cbRem=}, {cbAdd=}") |
|
|
|
assert cbLine == 1 |
|
assert cbRem == 5 |
|
assert cbAdd == 3 |