tags, better diff
This commit is contained in:
parent
2b71586c04
commit
d202ad3b05
5 changed files with 100 additions and 58 deletions
50
editor.py
50
editor.py
|
|
@ -71,34 +71,45 @@ save_bt.grid(column=0, row=0, sticky=(tk.W))
|
|||
open_bt = ttk.Button(toolbar, text="Ouvrir")
|
||||
open_bt.grid(column=1, row=0, sticky=(tk.W))
|
||||
|
||||
old_text = ""
|
||||
def diff(old, new):
|
||||
if old == new:
|
||||
return None
|
||||
index = 0
|
||||
line = 1
|
||||
char = 0
|
||||
for i in range(min(len(old), len(new))):
|
||||
if old[i] != new[i]:
|
||||
return {
|
||||
"type": "replace",
|
||||
"start": str(line)+"."+str(char),
|
||||
"end": 0,
|
||||
"start": "1.0+"+str(i)+"c",
|
||||
"end": "1.0+"+str(i+abs(len(old) - len(new))-1)+"c",
|
||||
"text": new[i:i+abs(len(old)-len(new))]
|
||||
}
|
||||
char += 1
|
||||
if old[i] == "\n":
|
||||
line += 1
|
||||
char = 0
|
||||
|
||||
return {
|
||||
"type": "insert",
|
||||
"start": "end",
|
||||
"text": new[i:i+abs(len(old)-len(new))]
|
||||
}
|
||||
if len(old) > len(new):
|
||||
return {
|
||||
"type": "replace",
|
||||
"start": "end-"+str(len(old)-len(new))+"c",
|
||||
"end": "end",
|
||||
"text": ""
|
||||
}
|
||||
else:
|
||||
return {
|
||||
"type": "insert",
|
||||
"start": "end",
|
||||
"text": new[len(old):]
|
||||
}
|
||||
|
||||
def on_area_input(event):
|
||||
global old_text
|
||||
#print(area.get("1.0", "end"))
|
||||
print(event)
|
||||
#sock.send({"type":"insert", "start":"1.0", "text":area.get("1.0", "end")}, send_addr)
|
||||
sock.send({"type":"replace", "start":"1.0", "end":"end", "text":area.get("1.0", "end")}, send_addr)
|
||||
#sock.send({"type":"replace", "start":"1.0", "end":"end", "text":area.get("1.0", "end")}, send_addr)
|
||||
d = diff(old_text, area.get("1.0","end"))
|
||||
if d == None:
|
||||
return
|
||||
sock.send(d, send_addr)
|
||||
old_text = area.get("1.0","end")
|
||||
|
||||
#if event.keycode == 25:
|
||||
# area.mark_set("insert", "1.0")
|
||||
|
|
@ -106,18 +117,23 @@ def on_area_input(event):
|
|||
area.bind("<KeyRelease>", on_area_input)
|
||||
area.bind("<B3-Motion>", on_area_input)
|
||||
|
||||
area.tag_configure("plop", background="#ffaaaa")
|
||||
|
||||
def on_request(r):
|
||||
global waiting_for_text
|
||||
global waiting_for_text, old_text
|
||||
print(r)
|
||||
c, a = r
|
||||
if c["type"] == "set":
|
||||
if waiting_for_text:
|
||||
area.replace("1.0", "end", c["text"])
|
||||
waiting_for_text = False
|
||||
old_text = area.get("1.0","end")
|
||||
elif c["type"] == "insert":
|
||||
area.insert(c["start"], c["text"])
|
||||
area.insert(c["start"], c["text"], "plop")
|
||||
old_text = area.get("1.0","end")
|
||||
elif c["type"] == "replace":
|
||||
area.replace(c["start"], c["end"], c["text"])
|
||||
area.replace(c["start"], c["end"], c["text"], "plop")
|
||||
old_text = area.get("1.0","end")
|
||||
elif c["type"] == "get":
|
||||
sock.send({"type":"set", "text":area.get("1.0", "end")}, send_addr)
|
||||
elif c["type"] == "create_line":
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue