Начало реализации процедуры поиска и замены (поиск криво но работает)

This commit is contained in:
svkalinin 2022-08-31 17:00:51 +03:00
parent 89b7ee09fc
commit d4f11b11de
3 changed files with 236 additions and 6 deletions

View File

@ -430,8 +430,9 @@ namespace eval Editor {
#bind $txt <Control-slash> {puts "/////////////////"}
# #bind $txt <Control-g> GoToLine
# bind $txt <Control-g> {focus .frmTool.frmGoto.entGoTo; .frmTool.frmGoto.entGoTo delete 0 end}
# bind $txt <Control-agrave> Find
# bind $txt <Control-f> Find
bind $txt <Control-agrave> "Editor::FindDialog $w"
bind $txt <Control-f> "Editor::FindDialog $w"
bind $txt <Control-F> "Editor::FindDialog $w"
# bind $txt <F3> {FindNext $w.text 1}
# bind $txt <Control-ecircumflex> ReplaceDialog
# bind $txt <Control-r> ReplaceDialog
@ -476,8 +477,8 @@ namespace eval Editor {
bind $txt <<Selection>> "Editor::SelectionGet $txt"
bind $txt <Control-i> ImageBase64Encode
bind $txt <Control-u> "Editor::SearchBrackets %W"
bind $txt <Control-F> "Editor::GoToFunction $w"
bind $txt <Control-f> "Editor::GoToFunction $w"
bind $txt <Control-J> "Editor::GoToFunction $w"
bind $txt <Control-j> "Editor::GoToFunction $w"
bind $txt <Alt-w> "$txt delete {insert wordstart} {insert wordend}"
bind $txt <Alt-r> "$txt delete {insert linestart} {insert lineend}"
bind $txt <Alt-b> "$txt delete {insert linestart} insert"
@ -765,6 +766,148 @@ namespace eval Editor {
wm geom $win +$x+$y
}
proc FindReplaceText {findString replaceString case regexp} {
global nbEditor
set txt [$nbEditor select].frmText.t
# $txt see $pos
# set pos [$txt search -nocase $findString $line.$x end]
set options ""
# $txt see 1.0
set pos [$txt index insert]
set allLines [$txt count -lines 1.0 end]
puts "$pos $allLines"
set line [lindex [split $pos "."] 0]
if [expr $line == $allLines] {
set pos "0.0"
set line [lindex [split $pos "."] 0]
}
set x [lindex [split $pos "."] 1]
# incr x $incr
puts "$findString -> $replaceString, $case, $regexp, $pos"
if {$case ne ""} {
lappend options $case
}
if {$regexp ne ""} {
lappend options $regexp
}
# set pos [$txt search $options $findString $pos end]
set pos [$txt search $options $findString $line.$x end]
$txt mark set insert $pos
$txt see $pos
puts $pos
# highlight the found word
set line [lindex [split $pos "."] 0]
# set x [lindex [split $pos "."] 1]
# set x [expr {$x + [string length $findString]}]
# $txt tag remove sel 1.0 end
# $txt tag add sel $pos $line.end
# #$text tag configure sel -background $editor(selectbg) -foreground $editor(fg)
# $txt tag raise sel
# focus -force $txt.t
# Position
return 1
}
# Find and replace text dialog
proc FindDialog {w} {
global editors lexers nbEditor nocaseSet regexpSet
variable txt
variable win
variable show
set findString ""
set replaceString ""
set txt $w.frmText.t
set win .finddialog
set regexpSet ""
set nocaseSet "-nocase"
if { [winfo exists $win] } { destroy $win }
toplevel $win
wm transient $win .
wm overrideredirect $win 1
ttk::entry $win.entryFind -width 30 -textvariable findString
ttk::entry $win.entryReplace -width 30 -textvariable replaceString
set show($win.entryReplace) false
ttk::button $win.bForward -image forward_20x20 -command "puts $findString"
ttk::button $win.bBackward -image backward_20x20 -command "puts $replaceString"
ttk::button $win.bDone -image done_20x20 -command {
puts "$findString -> $replaceString, $nocaseSet, $regexpSet"
}
ttk::button $win.bDoneAll -image doneall_20x20
ttk::button $win.bReplace -image replace_20x20 \
-command {
puts $Editor::show($Editor::win.entryReplace)
if {$Editor::show($Editor::win.entryReplace) eq "false"} {
grid $Editor::win.entryReplace -row 1 -column 0 -columnspan 2 -sticky nsew
grid $Editor::win.bDone -row 1 -column 3 -sticky e
grid $Editor::win.bDoneAll -row 1 -column 4 -sticky e
set Editor::show($Editor::win.entryReplace) "true"
} else {
grid remove $Editor::win.entryReplace $Editor::win.bDone $Editor::win.bDoneAll
set Editor::show($Editor::win.entryReplace) "false"
}
}
ttk::checkbutton $win.chkRegexp -text "Regexp" \
-variable regexpSet -onvalue "-regexp" -offvalue ""
ttk::checkbutton $win.chkCase -text "Case Sensitive" \
-variable nocaseSet -onvalue "" -offvalue "-nocase"
grid $win.entryFind -row 0 -column 0 -columnspan 2 -sticky nsew
grid $win.bForward -row 0 -column 3 -sticky e
grid $win.bBackward -row 0 -column 4 -sticky e
grid $win.bReplace -row 0 -column 5 -sticky e
grid $win.chkRegexp -row 2 -column 0 -sticky w
grid $win.chkCase -row 2 -column 1 -sticky w
# puts "[grid bbox $win] [grid size $win]"
# pack $win.lBox -expand true -fill y -side left
# pack $win.yscroll -side left -expand false -fill y
set boxX [expr [winfo rootx $w] + [expr [winfo width $nbEditor] - 350]]
set boxY [expr [winfo rooty $w] + 10]
bind $win <Escape> {
destroy $Editor::win
focus -force $Editor::txt.t
break
}
bind $win.entryFind <Escape> {
destroy $Editor::win
focus -force $Editor::txt.t
break
}
bind $win.entryFind <Return> {
# set findString [$win.entryFind get]
Editor::FindReplaceText "$findString" "" $nocaseSet $regexpSet
# destroy .gotofunction
# $Editor::txt tag remove sel 1.0 end
# focus $Editor::txt.t
break
}
bind $win.entryReplace <Return> {
# set findString [$win.entryFind get]
Editor::FindReplaceText {$findString} {$replaceString} $nocaseSet $regexpSet
# destroy .gotofunction
# $Editor::txt tag remove sel 1.0 end
# focus $Editor::txt.t
break
}
wm geom $win +$boxX+$boxY
focus -force $win.entryFind
}
proc Editor {fileFullPath nb itemName} {
global cfgVariables editors

View File

@ -661,3 +661,90 @@ image create photo spec_16x12 -data {
MSDdKO1goN1wGw7ZTadsy5KsqhgFAevxmNnh8HKPtnFNE9t+/4zW4Nzb3F6Bpzc+uPn0G7+rO3zt
PNdb1iTgAAAAAElFTkSuQmCC
}
image create photo backward_20x20 -data {
iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABhmlDQ1BJQ0MgcHJvZmlsZQAAKJF9
kT1Iw1AUhU9bpVUqDnYQEcxQnSyIioiTVqEIFUKt0KqDyUv/oElDkuLiKLgWHPxZrDq4OOvq4CoI
gj8gjk5Oii5S4n1JoUWMFx7v47x7Du/dB/jrZaaaHWOAqllGKhEXMtlVIfiKEIbQBR9mJGbqc6KY
hGd93VMf1V2MZ3n3/Vk9Ss5kgE8gnmW6YRFvEE9tWjrnfeIIK0oK8TnxqEEXJH7kuuzyG+eCw36e
GTHSqXniCLFQaGO5jVnRUIkniaOKqlG+P+OywnmLs1qusuY9+QvDOW1lmeu0BpHAIpYgQoCMKkoo
w0KMdo0UEyk6j3v4Bxy/SC6ZXCUwciygAhWS4wf/g9+zNfMT425SOA50vtj2xzAQ3AUaNdv+Prbt
xgkQeAautJa/UgemP0mvtbToEdC7DVxctzR5D7jcAfqfdMmQHClAy5/PA+9n9E1ZoO8W6F5z59Y8
x+kDkKZZJW+Ag0NgpEDZ6x7vDrXP7d+e5vx+AHqMcqqG+o//AAAABmJLR0QAAAAAAAD5Q7t/AAAA
CXBIWXMAAC4jAAAuIwF4pT92AAAAB3RJTUUH5ggfDAwnNGZdNAAAABl0RVh0Q29tbWVudABDcmVh
dGVkIHdpdGggR0lNUFeBDhcAAAChSURBVDjL7dS9DcIwEIbh13aRBSI5SOx3S9BTMMGNAUwDA4AQ
E1CF5gojEnOWaCLlK+3zI//DmuVGVUegB0KtLjZgqOoTyDU0eLEyIrIBHsDYNMMSE5Fz0X6fm2l0
YifgIiLbX2h0YldgB9xsubNoaMBexZhs2NeehkaMCjoY+pHe0CNwALrKmQVgKOr3QJoqytbZOa6o
uz41PqS0/iX/yxsFNk06gT9D1AAAAABJRU5ErkJggg==
}
image create photo forward_20x20 -data {
iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABhmlDQ1BJQ0MgcHJvZmlsZQAAKJF9
kT1Iw1AUhU9bpVUqDnYQEcxQnSyIioiTVqEIFUKt0KqDyUv/oElDkuLiKLgWHPxZrDq4OOvq4CoI
gj8gjk5Oii5S4n1JoUWMFx7v47x7Du/dB/jrZaaaHWOAqllGKhEXMtlVIfiKEIbQBR9mJGbqc6KY
hGd93VMf1V2MZ3n3/Vk9Ss5kgE8gnmW6YRFvEE9tWjrnfeIIK0oK8TnxqEEXJH7kuuzyG+eCw36e
GTHSqXniCLFQaGO5jVnRUIkniaOKqlG+P+OywnmLs1qusuY9+QvDOW1lmeu0BpHAIpYgQoCMKkoo
w0KMdo0UEyk6j3v4Bxy/SC6ZXCUwciygAhWS4wf/g9+zNfMT425SOA50vtj2xzAQ3AUaNdv+Prbt
xgkQeAautJa/UgemP0mvtbToEdC7DVxctzR5D7jcAfqfdMmQHClAy5/PA+9n9E1ZoO8W6F5z59Y8
x+kDkKZZJW+Ag0NgpEDZ6x7vDrXP7d+e5vx+AHqMcqqG+o//AAAABmJLR0QAAAAAAAD5Q7t/AAAA
CXBIWXMAAC4jAAAuIwF4pT92AAAAB3RJTUUH5ggfDAwso7SEvAAAABl0RVh0Q29tbWVudABDcmVh
dGVkIHdpdGggR0lNUFeBDhcAAACPSURBVDjL7dSxDYMwEIXhn0xl0aHUmeN2SM8Qt4YRbZQqGyWh
g4bCMmdiZLr4lfbp0z3JMtT8WVR1Lp1vrEsRaY5g4fwlOOxyN42wB3DdgMAkIsMvNMI+wAR8N5XX
OOCuqjerjoE9gR54pcAkmoOlQBPNwfbA1Ka7WE4c4Ne6b2AE2tL37gB/Fhaibf1LzCz06k9PpDWG
hAAAAABJRU5ErkJggg==
}
image create photo replace_20x20 -data {
iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABhmlDQ1BJQ0MgcHJvZmlsZQAAKJF9
kT1Iw1AUhU9bpVUqDnYQEcxQnSyIioiTVqEIFUKt0KqDyUv/oElDkuLiKLgWHPxZrDq4OOvq4CoI
gj8gjk5Oii5S4n1JoUWMFx7v47x7Du/dB/jrZaaaHWOAqllGKhEXMtlVIfiKEIbQBR9mJGbqc6KY
hGd93VMf1V2MZ3n3/Vk9Ss5kgE8gnmW6YRFvEE9tWjrnfeIIK0oK8TnxqEEXJH7kuuzyG+eCw36e
GTHSqXniCLFQaGO5jVnRUIkniaOKqlG+P+OywnmLs1qusuY9+QvDOW1lmeu0BpHAIpYgQoCMKkoo
w0KMdo0UEyk6j3v4Bxy/SC6ZXCUwciygAhWS4wf/g9+zNfMT425SOA50vtj2xzAQ3AUaNdv+Prbt
xgkQeAautJa/UgemP0mvtbToEdC7DVxctzR5D7jcAfqfdMmQHClAy5/PA+9n9E1ZoO8W6F5z59Y8
x+kDkKZZJW+Ag0NgpEDZ6x7vDrXP7d+e5vx+AHqMcqqG+o//AAAABmJLR0QAAAAAAAD5Q7t/AAAA
CXBIWXMAAC4jAAAuIwF4pT92AAAAB3RJTUUH5ggfDAwjMwuZLQAAABl0RVh0Q29tbWVudABDcmVh
dGVkIHdpdGggR0lNUFeBDhcAAACLSURBVDjL3ZPdCYAwDISvHSy6TbYQBJfoLgraxfSlQiklpj8o
eG+F5HIhX4FfyTl3AiCpxlaYHpKpySRQiZkHAL454VPSakNm3nL9JnkTgFFINUdmC4C9x5VXaWip
qKfZezCrrxxxqV7TKMyKILetZukGVphYJSMhEr7XDbIXar0WcgrrTz3J+RbmC6trNHnCbgdfAAAA
AElFTkSuQmCC
}
image create photo doneall_20x20 -data {
iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABhmlDQ1BJQ0MgcHJvZmlsZQAAKJF9
kT1Iw1AUhU9bpVUqDnYQEcxQnSyIioiTVqEIFUKt0KqDyUv/oElDkuLiKLgWHPxZrDq4OOvq4CoI
gj8gjk5Oii5S4n1JoUWMFx7v47x7Du/dB/jrZaaaHWOAqllGKhEXMtlVIfiKEIbQBR9mJGbqc6KY
hGd93VMf1V2MZ3n3/Vk9Ss5kgE8gnmW6YRFvEE9tWjrnfeIIK0oK8TnxqEEXJH7kuuzyG+eCw36e
GTHSqXniCLFQaGO5jVnRUIkniaOKqlG+P+OywnmLs1qusuY9+QvDOW1lmeu0BpHAIpYgQoCMKkoo
w0KMdo0UEyk6j3v4Bxy/SC6ZXCUwciygAhWS4wf/g9+zNfMT425SOA50vtj2xzAQ3AUaNdv+Prbt
xgkQeAautJa/UgemP0mvtbToEdC7DVxctzR5D7jcAfqfdMmQHClAy5/PA+9n9E1ZoO8W6F5z59Y8
x+kDkKZZJW+Ag0NgpEDZ6x7vDrXP7d+e5vx+AHqMcqqG+o//AAAABmJLR0QAAAAAAAD5Q7t/AAAA
CXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH5ggfDAI0LlsxZAAAAktJREFUOMvt1E9IUwEcB/Cv
7rkHj735ZOp7GjhCn6O1mf8qKKJbhwXZn4G7+MI2hyBp1w5Btw6R0XHeMsmXc7FMtzUzrZe0Cere
qzndjKi0wlV2KJexrS4ZsTroIejg9/iD3+fw+/H7Adv576LaasPZjg53s83WT9P0UCwWW2mzt11o
EVoecBz3WpblaP5WMEdra6fRZLJ+W1+HJEnt1hPWo6Ya00UAec8iEQsA46ZBQRBqjGZzdzaT+R7w
+yWSJNfqGmpFUq3OGwsGI9Oy/ArAyqZAp9NJVVVWShRFqSbGJxYeSpJia7adLC4pocKhqeVhvz8E
wAvg7a8Ztjud15pttmFGw8Tm5ucSdrv91GlBeKqh6TDHsgMVen2FIsvvr/f2Btocjt0ms3nP88XF
NVeP6242m50EMAQAxAb4JZVSKIpSNeyrF1feLVnT6XQ8vpCYURPE5SqeNy8vLa33i6LfYrGQtXV1
hz+trmZuu92BdDqdAHDjjy0rihItLS7eyxsMfJFOd3zE53PpGN3HA4cOnvmaSmUHRPGetrDwTdOx
JruKUOXf8XofzyqKDOAqgNSGk5czLupcV1d8l9G4I7EQXy3lWFqj0RBer3dqp17PcmVlTFl5eeH9
0dH5QY8nCKAHQPR3gMgB156EQvUMw7zkDdVFADApSS+0Wi1Z39ioBwB5ZvbDoMfzCEAwF/sbiHA4
nGRZ9sj+goLxZDL5ubevb4zjuFA1z3dnMln1zVuiD4ACYGSrF2QAcAVA58+aDsAlAOcBFGw/mX+X
Hzli2b839nCKAAAAAElFTkSuQmCC
}
image create photo done_20x20 -data {
iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABhmlDQ1BJQ0MgcHJvZmlsZQAAKJF9
kT1Iw1AUhU9bpVUqDnYQEcxQnSyIioiTVqEIFUKt0KqDyUv/oElDkuLiKLgWHPxZrDq4OOvq4CoI
gj8gjk5Oii5S4n1JoUWMFx7v47x7Du/dB/jrZaaaHWOAqllGKhEXMtlVIfiKEIbQBR9mJGbqc6KY
hGd93VMf1V2MZ3n3/Vk9Ss5kgE8gnmW6YRFvEE9tWjrnfeIIK0oK8TnxqEEXJH7kuuzyG+eCw36e
GTHSqXniCLFQaGO5jVnRUIkniaOKqlG+P+OywnmLs1qusuY9+QvDOW1lmeu0BpHAIpYgQoCMKkoo
w0KMdo0UEyk6j3v4Bxy/SC6ZXCUwciygAhWS4wf/g9+zNfMT425SOA50vtj2xzAQ3AUaNdv+Prbt
xgkQeAautJa/UgemP0mvtbToEdC7DVxctzR5D7jcAfqfdMmQHClAy5/PA+9n9E1ZoO8W6F5z59Y8
x+kDkKZZJW+Ag0NgpEDZ6x7vDrXP7d+e5vx+AHqMcqqG+o//AAAABmJLR0QAAAAAAAD5Q7t/AAAA
CXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH5ggfDAgpt7K1NwAAAZ9JREFUOMtjYBgFgw4wk6Mp
JytrQ3hExNLfv39fePDgwX0GBoa/MDkmUg1Lio8v1tbV9f/18yfj5cuXYxgYGLiR5UkyMDo62lBH
X7/r39+/DJs3bXr65s2bq4yMjF+Q1bAQ7bKkJG4FeflDXFxcTDu3b/947MSJHQwMDEv+////G6cL
01JSpnV3d//1cvfKZ2Bg4EOWExIUPCkuIcFz4fz5n+s3bjzMwMCwjIGB4S66xSgu/Pj5810uLi4m
Owfb/revX/xW09Y+tnjx4hsZaWmTVNXUtJ88fvx3+YoV5xkYGFYwMDDsJxjLV69evSksKGirrqEh
JyIm5r527drt/t7+Vkamxg3fv337v2zJkruPnz5dwsjIOJeBgeEfNgMZsYjJ5eXmntHW0RG9dePm
F3FJCU4eHh7m1atXv9y/f/8SBgaGDgYGhjekpMOPb96+3a2kqJisoKjIycHBwXT44MEvm7ds2c7A
wDCNgYHhPjlpl4mBgcGwtaXlb15u7i8GBoadDAwMXjDJoKAgLnLSMAMDA4M+1FXxWCxkGS1oaAMA
XcmM9siOlSAAAAAASUVORK5CYII=
}

View File

@ -10,7 +10,7 @@ exec wish "$0" -- "$@"
######################################################
# Version: 2.0.0
# Release: alpha
# Build: 30082022164258
# Build: 31082022165947
######################################################
# определим текущую версию, релиз и т.д.