From a1248f6941d6601097abd8ebb874efe917aa5f73 Mon Sep 17 00:00:00 2001 From: svkalinin Date: Fri, 16 Dec 2022 09:33:01 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE?= =?UTF-8?q?=D1=81=D1=82=D1=8C=20=D0=BC=D0=BD=D0=BE=D0=B3=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D1=80=D0=BE=D1=87=D0=BD=D1=8B=D1=85=20=D0=BA=D0=BE=D0=BC=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D1=82=D0=B0=D1=80=D0=B8=D0=B5=D0=B2,=20=D0=B5?= =?UTF-8?q?=D1=81=D0=BB=D0=B8=20=D1=8D=D1=82=D0=BE=20=D0=BF=D0=BE=D0=B4?= =?UTF-8?q?=D0=B4=D0=B5=D1=80=D0=B6=D0=B8=D0=B2=D0=B0=D0=B5=D1=82=D1=81?= =?UTF-8?q?=D1=8F=20=D1=8F=D0=B7=D1=8B=D0=BA=D0=BE=D0=BC=20(html,=20go,=20?= =?UTF-8?q?ruby).=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20?= =?UTF-8?q?=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D0=B2=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20=D0=B4=D0=B0=D0=BD=D0=BD=D0=BE=D0=B9=20=D1=84=D1=83=D0=BD?= =?UTF-8?q?=D1=86=D0=B8=D0=BE=D0=BD=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D0=B8=20=D0=B2=20=D0=BC=D0=B5=D0=BD=D1=8E=20=D0=B8=20?= =?UTF-8?q?=D0=B2=20=D0=BA=D0=BE=D0=BD=D1=84=D0=B8=D0=B3=D0=B5.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/config.tcl | 1 + lib/editor.tcl | 37 +++++++++++++++++++++++++++++++------ lib/lexers.tcl | 12 ++++++++++-- lib/menu.tcl | 2 ++ lib/msgs/ru.msg | 1 + projman.tcl | 2 +- 6 files changed, 46 insertions(+), 9 deletions(-) diff --git a/lib/config.tcl b/lib/config.tcl index 3d87841..8b414cc 100644 --- a/lib/config.tcl +++ b/lib/config.tcl @@ -60,6 +60,7 @@ lineNumberShow=true tabSize=4 procedureHelper=false variableHelper=true +multilineComments=true \[UserSession\] opened= editedFiles= diff --git a/lib/editor.tcl b/lib/editor.tcl index 021cfc2..460ec98 100644 --- a/lib/editor.tcl +++ b/lib/editor.tcl @@ -20,30 +20,55 @@ namespace eval Editor { # Comment one string or selected string proc Comment {txt fileType} { - global lexers + global lexers cfgVariables set selIndex [$txt tag ranges sel] set pos [$txt index insert] set lineNum [lindex [split $pos "."] 0] # set posNum [lindex [split $pos "."] 1] - + set useMultiLine false + if [dict exists $lexers $fileType commentSymbol] { set symbol [dict get $lexers $fileType commentSymbol] } else { set symbol "#" } + if {[dict exists $lexers $fileType commentMultilineSymbolBegin] == 1 && $cfgVariables(multilineComments) eq "true"} { + set symbolBegin [dict get $lexers $fileType commentMultilineSymbolBegin] + } else { + set symbolBegin "" + } + if {[dict exists $lexers $fileType commentMultilineSymbolEnd] == 1 && $cfgVariables(multilineComments) eq "true"} { + set symbolEnd [dict get $lexers $fileType commentMultilineSymbolEnd] + } else { + set symbolEnd "" + } + # puts "Select : $selIndex" if {$selIndex != ""} { set lineBegin [lindex [split [lindex $selIndex 0] "."] 0] set lineEnd [lindex [split [lindex $selIndex 1] "."] 0] + # Если выделенно больше одной строки то включаем многострочный комментарий + if {$lineBegin < $lineEnd} { + set useMultiLine true + } set posBegin [lindex [split [lindex $selIndex 1] "."] 0] set posEnd [lindex [split [lindex $selIndex 1] "."] 1] if {$lineEnd == $lineNum && $posEnd == 0} { set lineEnd [expr $lineEnd - 1] } - for {set i $lineBegin} {$i <=$lineEnd} {incr i} { - #$txt insert $i.0 "# " - regexp -nocase -indices -- {^(\s*)(.*?)} [$txt get $i.0 $i.end] match v1 v2 - $txt insert $i.[lindex [split $v2] 0] "$symbol " + if {$symbolEnd ne ""} { + $txt insert $lineEnd.end "\n$symbolEnd" + set lineEnd [expr $lineEnd + 2] + } + if {$symbolBegin ne ""} { + $txt insert $lineBegin.0 "$symbolBegin\n" + } + if {$symbolBegin eq "" && $symbolEnd eq ""} { + for {set i $lineBegin} {$i <= $lineEnd} {incr i} { + #$txt insert $i.0 "# " + regexp -nocase -indices -- {^(\s*)(.*?)} [$txt get $i.0 $i.end] match v1 v2 + $txt insert $i.[lindex [split $v2] 0] "$symbol " + } } $txt tag add comments $lineBegin.0 $lineEnd.end $txt tag raise comments diff --git a/lib/lexers.tcl b/lib/lexers.tcl index 57fd3e9..9c71be6 100644 --- a/lib/lexers.tcl +++ b/lib/lexers.tcl @@ -15,6 +15,8 @@ dict set lexers TCL commands [info commands] #-------------------------------------------------- # Go lang dict set lexers GO commentSymbol {//} +dict set lexers GO commentMultilineSymbolBegin {/*} +dict set lexers GO commentMultilineSymbolEnd {*/} dict set lexers GO procFindString {func.*?PROCNAME} dict set lexers GO procRegexpCommand {regexp -nocase -all -- {\s*?func\s*?(\(\w+\s*?\**?\w+\)|)\s*?(\w+)\((.*?)\)\s+?([a-zA-Z0-9\{\}\[\]\(\)-_.]*?|)\s*?\{} $line match linkName procName params returns} dict set lexers GO varRegexpCommand {regexp -nocase -all -line -- {^\s*?var\s+([a-zA-Z0-9\-_$]+)\s+(.+?)(\s*$)} $line match varName varType lineEnd} @@ -35,6 +37,8 @@ dict set lexers PY varRegexpCommand {regexp -nocase -all -line -- {^\s*?(\w+)\s* #-------------------------------------------------- # Ruby dict set lexers RB commentSymbol {#} +dict set lexers RB commentMultilineSymbolBegin {=begin} +dict set lexers RB commentMultilineSymbolEnd {end=} dict set lexers RB tabSize 2 dict set lexers RB procFindString {(def |class )\s*?PROCNAME} dict set lexers RB procRegexpCommand {regexp -nocase -all -- {^\s*?(def|class)\s([a-zA-Z0-9\-_:\?]+?)($|\s|\(.+?\))} $line match keyWord procName params} @@ -75,14 +79,18 @@ dict set lexers INI procRegexpCommand {regexp -nocase -all -- {^\s*?(\[)(.+?)(\] # ------------------------------------------------- # HTML -dict set lexers HTML commentSymbol {<\!--} +dict set lexers HTML commentSymbol {} dict set lexers HTML tabSize 4 dict set lexers HTML procFindString {(<.+>|)PROCNAME(|)} dict set lexers HTML procRegexpCommand {regexp -nocase -all -- {(<.+>|)(.+?)(|)} $line match v1 procName v2} # ------------------------------------------------- # HTM -dict set lexers HTM commentSymbol {<\!--} +dict set lexers HTM commentSymbol {} dict set lexers HTM tabSize 4 dict set lexers HTM procFindString {(<.+>|)PROCNAME(|)} dict set lexers HTM procRegexpCommand {regexp -nocase -all -- {(<.+>|)(.+?)(|)} $line match v1 procName v2} diff --git a/lib/menu.tcl b/lib/menu.tcl index cd9bc25..429e7ff 100644 --- a/lib/menu.tcl +++ b/lib/menu.tcl @@ -118,6 +118,8 @@ proc GetViewMenu {m} { -variable cfgVariables(procedureHelper) -onvalue true -offvalue false # -command "ViewHelper procedureHelper" + $m add checkbutton -label [::msgcat::mc "Multiline comments"] \ + -variable cfgVariables(multilineComments) -onvalue true -offvalue false } proc GetHelpMenu {m} { diff --git a/lib/msgs/ru.msg b/lib/msgs/ru.msg index 9804e38..3eaa637 100644 --- a/lib/msgs/ru.msg +++ b/lib/msgs/ru.msg @@ -124,6 +124,7 @@ ::msgcat::mcset ru "Matches" "Совпадений" ::msgcat::mcset ru "Modules" "Модули" ::msgcat::mcset ru "Modifying the Registry..." "Внесение изменений в реестр" +::msgcat::mcset ru "Multiline comments" "Многострочные комментарии" ::msgcat::mcset ru "Must be one file select!" "Вы должны выбрать только один файл" ::msgcat::mcset ru "Must be one or two file select!" "Вы должны выбрать один или два файла" ::msgcat::mcset ru "Network" "Сеть" diff --git a/projman.tcl b/projman.tcl index 04b34de..02b2d5a 100755 --- a/projman.tcl +++ b/projman.tcl @@ -10,7 +10,7 @@ exec wish "$0" -- "$@" ###################################################### # Version: 2.0.0 # Release: alpha -# Build: 15122022121726 +# Build: 16122022093108 ###################################################### # определим текущую версию, релиз и т.д.