亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? editor.tcl

?? 是TCL的另外一個編譯(解釋)器
?? TCL
?? 第 1 頁 / 共 4 頁
字號:
##############################################################################
#    editor.tcl --
#    Copyright (C) 1999-2002  Andreas Sievers
#    andreas.sievers@t-online.de
#    Parts are based upon Tcl Developer Studio by Alexey Kakunin
#    last update: 2002/06/13: improvment for indentation
#
##############################################################################

namespace eval editorWindows {
    
    namespace export setBindings create selectAll
    namespace export gotoMark gotoProc findNext setCursor replace replaceAll
    namespace export enableHL disableHL onTabSize onFontChange
    
    variable This
    variable TxtWidget ""
    variable Text ""
    variable UndoID
}

proc editorWindows::setBindings {} {
    global tcl_platform
    global EditorData
    variable TxtWidget
    
    set tabSize [expr {$EditorData(options,tabSize)* [font measure $EditorData(options,fonts,editorFont) -displayof $TxtWidget " "]}]
    for {set i 1} {$i < 11} {incr i} {
        set tab [expr {$tabSize * $i}]
        set tabList [lappend tabList $tab]
    }
    $TxtWidget configure -wrap none -font $EditorData(options,fonts,editorFont) -tabs $tabList
    ConfigureTags
    
    # create bindings
    bind $TxtWidget <Tab> "editorWindows::OnTabPress; break"
    if {$tcl_platform(platform) != "windows"} {
        bind $TxtWidget <Control-Insert> "editorWindows::copy; break"
        bind $TxtWidget <Control-Delete> "editorWindows::cut; break"
        bind $TxtWidget <Shift-Insert>   "editorWindows::paste; break"
        bind $TxtWidget <Control-a> "editorWindows::selectAll; break"
    }
    bind $TxtWidget <KeyPress-Return> {[editorWindows::onKeyPressReturn %A ]}
    bind $TxtWidget <KeyRelease-Return> "editorWindows::IndentCurLine ; editorWindows::OnKeyRelease"
    bind $TxtWidget <KeyRelease-space> "editorWindows::OnSpaceRelease;editorWindows::OnKeyRelease"
    # bind $TxtWidget <KeyRelease-braceright> "editorWindows::IndentCurLine;editorWindows::OnKeyRelease"
    # bind $TxtWidget <KeyRelease-braceleft> "editorWindows::OnLeftBraceRelease;editorWindows::OnKeyRelease"
    bind $TxtWidget <KeyRelease-parenleft> "editorWindows::OnLeftParenRelease;editorWindows::OnKeyRelease"
    # bind $TxtWidget <KeyRelease-bracketleft> "editorWindows::OnLeftBracketRelease;editorWindows::OnKeyRelease"
    bind $TxtWidget <KeyRelease-quotedbl> "editorWindows::OnQuoteDblRelease;editorWindows::OnKeyRelease"
    bind $TxtWidget <KeyPress-Delete> {set Editor::current(char) %A; [ editorWindows::delete ] }
    bind $TxtWidget <Control-h> {set Editor::current(char) %A; [ editorWindows::delete bs ] }
    bind $TxtWidget <BackSpace> {set Editor::current(char) %A; [ editorWindows::delete bs ] }
    bind $TxtWidget <KeyRelease> {editorWindows::OnKeyRelease ; break}
    bind $TxtWidget <KeyPress> {[editorWindows::OnKeyPress %A ] }
    bind $TxtWidget <Button-3> {tk_popup $Editor::textMenu %X %Y ; break}
    bind $TxtWidget <ButtonRelease> editorWindows::OnMouseRelease
    bind $TxtWidget <Control-x> "Editor::cut; break"
    bind $TxtWidget <Control-c> "Editor::copy; break"
    bind $TxtWidget <Control-v> "Editor::paste; break"
    bind $TxtWidget <Control-y> "Editor::delLine ; break"
    bind $TxtWidget <KeyRelease-Home> "editorWindows::gotoFirstChar;break"
    bind $TxtWidget <Control-l> "repeat_last_search $TxtWidget"
    return
}

proc editorWindows::OnKeyPress {key} {
    variable TxtWidget
    global EditorData
    
    set Editor::current(char) $key
    switch -regexp -- $key {
        
        {.} {
            #printable chars and Return
            if {[$TxtWidget tag ranges sel] != "" && $EditorData(options,autoUpdate)} {
                set start [$TxtWidget index sel.first]
                set end [$TxtWidget index sel.last]
                set range [editorWindows::deleteMarks $start $end]
                $TxtWidget mark set delStart [lindex $range 0]
                $TxtWidget mark gravity delStart left
                $TxtWidget mark set delEnd [lindex $range 1]
                $TxtWidget delete sel.first sel.last
                $TxtWidget insert insert $key
                if {[$TxtWidget compare insert > delEnd]} {
                    $TxtWidget mark set delEnd insert
                }
                Editor::updateOnIdle [list [$TxtWidget index delStart] [$TxtWidget index delEnd]]
                $TxtWidget mark unset delStart
                $TxtWidget mark unset delEnd
                return break
            } else  {
                set rexp {^(( |\t|\;)*((namespace )|(class )|(proc )|(body )|(configbody )))|((( |\t|\;)*[^\#]*)((method )|(constructor )|(destructor )))}
                if {[regexp $rexp [$TxtWidget get "insert linestart" "insert lineend"]]} {
                    set Editor::current(isNode) 1
                } else  {
                    set Editor::current(isNode) 0
                }
            }
        }
        
        default  {
            #non printable chars
            return list
        }
    }
    return list
}

proc editorWindows::gotoFirstChar {} {
    variable TxtWidget
    
    set curPos [$Editor::current(text) index insert]
    set result [Editor::getFirstChar $curPos]
    $TxtWidget mark set insert [lindex $result 1]
    
}

# edit-copy
proc editorWindows::copy {} {
    variable TxtWidget
    
    if {[catch {$TxtWidget index sel.first}]} {
        return
    }
    
    set lineStart [lindex [split [$TxtWidget index sel.first] "."] 0]
    set lineEnd [lindex [split [$TxtWidget index sel.last] "."] 0]
    
    tk_textCopy $TxtWidget
    
    ReadCursor
    ColorizeLines $lineStart $lineEnd
    
    return
}

# edit-cut
proc editorWindows::cut {} {
    variable TxtWidget
    global EditorData
    
    if {$TxtWidget == ""} {
        return
    }
    if {[$TxtWidget tag ranges sel] != "" && $EditorData(options,autoUpdate)} {
        set start [$TxtWidget index sel.first]
        set end [$TxtWidget index sel.last]
        set rexp {(^( |\t|\;)*namespace )|(^( |\t|\;)*class )|(^( |\t|\;)*proc )|(method )|(^( |\t|\;)*body )|(constructor )|(destructor )}
        if {[regexp $rexp [$TxtWidget get $start $end]]} {
            set range [editorWindows::deleteMarks $start $end]
            $TxtWidget mark set delStart [lindex $range 0]
            $TxtWidget mark gravity delStart left
            $TxtWidget mark set delEnd [lindex $range 1]
            tk_textCut $TxtWidget
            Editor::updateOnIdle [list [$editorWindows::TxtWidget index delStart] [$TxtWidget index delEnd]]
            $TxtWidget mark unset delStart
            $TxtWidget mark unset delEnd
        } else  {
            tk_textCut $TxtWidget
            update
        }
    } else  {
        tk_textCut $TxtWidget
        update
    }
    ReadCursor
    
    set lineNum [lindex [split [$TxtWidget index insert] "."] 0]
    
    ColorizeLines $lineNum $lineNum
    
    return
}

# edit-paste
proc editorWindows::paste {} {
    global tcl_platform
    global EditorData
    variable TxtWidget
    
    if {$TxtWidget == "" || [focus] != $TxtWidget} {
        return
    }
    if {$EditorData(options,autoUpdate)} {
        if {[$TxtWidget tag ranges sel] == "" } {
            #get prev NodeIndex boundaries
            set range [getUpdateBoundaries insert]
            set start [lindex $range 0]
            set end [lindex $range 1]
            tk_textPaste $TxtWidget
            
            $TxtWidget see insert
            if {[$TxtWidget compare insert > $end]} {
                set end [$TxtWidget index insert]
            }
            Editor::updateOnIdle [list $start $end]
        } else  {
            set lineStart [lindex [split [$TxtWidget index sel.first] "."] 0]
            set start [$TxtWidget index sel.first]
            set end [$TxtWidget index sel.last]
            set range [editorWindows::deleteMarks $start $end]
            $TxtWidget mark set delStart [lindex $range 0]
            $TxtWidget mark gravity delStart left
            $TxtWidget mark set delEnd [lindex $range 1]
            if {"$tcl_platform(platform)" == "unix"} {
                catch { $TxtWidget delete sel.first sel.last }
            }
            tk_textPaste $TxtWidget
            $TxtWidget see insert
            if {[$TxtWidget compare insert > $end]} {
                set end [$TxtWidget index insert]
            }
            Editor::updateOnIdle [list $start $end]
            $TxtWidget mark unset delStart
            $TxtWidget mark unset delEnd
        }
    }
    update idletasks
    ReadCursor
    set lineStart [lindex [split [$TxtWidget index $start] "."] 0]
    set lineEnd [lindex [split [$TxtWidget index $end] "."] 0]
    ColorizeLines $lineStart $lineEnd
    autoIndent $lineStart.0 "$lineEnd.0 lineend"
    return
}

proc editorWindows::getMarkNames {start end} {
    variable TxtWidget
    
    if {[$TxtWidget index end] == $end} {
        set end "end -1c"
    }
    set markList [array names Editor::procMarks]
    set resultList ""
    set markIndex [$TxtWidget index $start]
    while {[$TxtWidget compare $markIndex <= $end]} {
        #get the right mark
        foreach { type markName index} [$TxtWidget dump -mark $markIndex] {
            set result [lsearch $markList $markName]
            if {$result != -1} {
                lappend resultList $markName
            }
        }
        set markName [$TxtWidget mark next "$markIndex +1c"]
        if {$markName == ""} {
            break
        } else  {
            set markIndex [$TxtWidget index $markName]
        }
    }
    return $resultList
}

proc editorWindows::getUpdateBoundaries {start {end insert}} {
    variable TxtWidget
    set start [$TxtWidget index "$start linestart"]
    set end [$TxtWidget index "$end lineend"]
    set markList [editorWindows::getMarkNames $start $end]
    if {$markList == ""} {
        return [list $start $end]
    }
    # set boundaries to start or end of a node array
    foreach markName $markList {
        #get counterMark
        set counterMark ""
        if {[regexp "(_end_of_proc)$" $markName]} {
            #this is an end mark
            regsub "(_end_of_proc)$" $markName "" counterMark
            if {[$TxtWidget compare $counterMark < $start]} {
                set start $counterMark
            }
        } else  {
            #this is a start mark
            append counterMark $markName "_end_of_proc"
            if {[$TxtWidget compare $counterMark > $end]} {
                set end $counterMark
            }
        }
    } ;#end of foreach
    #now we should have the correct boundaries
    set start [$TxtWidget index $start]
    set end [$TxtWidget index $end]
    return [list $start $end]
}

proc editorWindows::deleteMarks {start end} {
    global EditorData
    variable TxtWidget
    
    set range [getUpdateBoundaries $start $end]
    set start [lindex $range 0]
    set end [lindex $range 1]
    set markList [editorWindows::getMarkNames $start $end]
    if {$markList != ""} {
        foreach markName $markList {
            #do not delete duplicates or namespaces or classes with children
            if {[$TxtWidget compare $markName > $end] || [$TxtWidget compare $markName < $start]} {
                continue
            }
            set tempName $markName
            regsub {_end_of_proc} $markName "" tempName
            if {[$Editor::treeWindow exists $tempName]} {
                set type [lindex [$Editor::treeWindow itemcget $tempName -data] 0]
            } else  {
                set type normal
            }
            switch -- $type {
                "class" -
                "namespace" {
                    # if there are remaining nodes, don磘 delete namespace/class
                    if {[$Editor::treeWindow nodes $tempName] != ""} {
                        $TxtWidget mark set $markName 1.0
                    } else  {
                        if {$markName == $tempName} {
                            Editor::tdelNode $tempName
                        }
                        #get counterMark
                        set counterMark ""
                        if {[regexp "(_end_of_proc)$" $markName]} {
                            #this is an end mark
                            regsub "(_end_of_proc)$" $markName "" counterMark
                        } else  {
                            #this is a start mark
                            append counterMark $markName "_end_of_proc"
                        }
                        catch {$TxtWidget mark unset $markName}
                        catch {unset Editor::procMarks($markName)}
                    }
                }
                "file" -
                "code" {
                    #skip
                }
                default {
                    if {$markName == $tempName} {
                        Editor::tdelNode $markName
                    }
                    catch {$TxtWidget mark unset $markName}
                    catch {unset Editor::procMarks($markName)}
                }
            }
        }
    }
    return [list $start $end]
}

# edit-delete
proc editorWindows::delete {{backspace ""}} {
    global tcl_platform
    global EditorData
    variable TxtWidget
    
    if {$TxtWidget == "" || !$EditorData(options,autoUpdate)} {
        return list
    }
    set rexp {(^( |\t|\;)*namespace )|(^( |\t|\;)*class )|(^( |\t|\;)*proc )|(method )|(^( |\t|\;)*body )|(constructor )|(destructor )}
    if {[$TxtWidget tag ranges sel] != ""} {
        set start [$TxtWidget index "sel.first linestart"]
        set end [$TxtWidget index "sel.last lineend"]
        ColorizeLine [lindex [split [$TxtWidget index insert] "."] 0]
        if {![regexp $rexp [$TxtWidget get $start $end]]} {
            return list
        }
        $TxtWidget delete sel.first sel.last
        ColorizeLine [lindex [split [$TxtWidget index insert] "."] 0]
        Editor::updateOnIdle [list $start $end]
        return break
    }
    set start [$TxtWidget index "insert linestart"]
    set end [$TxtWidget index "insert lineend"]
    if {![regexp $rexp [$TxtWidget get $start $end]]} {
        ColorizeLine [lindex [split [$TxtWidget index insert] "."] 0]
        return list
    } else  {
        if {$backspace == {}} {
            $TxtWidget delete insert

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品制服美女久久| 亚洲最大色网站| 国产精品99久久久| 国产人成一区二区三区影院| 国产精品资源在线看| 欧美激情一区二区三区蜜桃视频 | 亚洲欧美日韩在线播放| 成人ar影院免费观看视频| 亚洲男人的天堂在线观看| 欧洲激情一区二区| 日本视频一区二区三区| 精品国产免费视频| av成人免费在线观看| 亚洲午夜成aⅴ人片| 日韩三级视频在线看| 国产乱码精品一区二区三区五月婷 | 亚洲精品一线二线三线| 成人激情免费网站| 亚洲综合图片区| 欧美一区午夜视频在线观看| 国产黄色精品视频| 亚洲综合色在线| 欧美精品一区二区三区一线天视频| 国产精品一区久久久久| 一区二区国产视频| 精品国产乱码久久久久久牛牛 | 国产很黄免费观看久久| 亚洲精品视频在线看| 欧美卡1卡2卡| 成人动漫av在线| 秋霞午夜av一区二区三区| 国产午夜精品福利| 欧美男女性生活在线直播观看| 久久国产精品99久久人人澡| 最新成人av在线| 精品欧美乱码久久久久久| 色一情一伦一子一伦一区| 激情图区综合网| 亚洲高清视频中文字幕| 中文一区在线播放| 日韩精品影音先锋| 欧美性感一类影片在线播放| 岛国一区二区在线观看| 日本亚洲视频在线| 亚洲一区二区三区四区五区黄| 久久免费午夜影院| 欧美男女性生活在线直播观看| heyzo一本久久综合| 国产伦精品一区二区三区视频青涩 | 久久久久久久久伊人| 欧美日韩国产成人在线91| 成人精品视频一区| 国产精品一级片在线观看| 天天影视网天天综合色在线播放| 亚洲免费视频中文字幕| 国产精品网站导航| 久久久一区二区三区捆绑**| 欧美一区二区三区在线观看| 欧美日韩免费一区二区三区| 99这里只有精品| 风间由美一区二区三区在线观看 | 一区二区三区在线播| 国产精品午夜久久| 精品处破学生在线二十三| 欧美高清精品3d| 欧美性高清videossexo| 91久久精品国产91性色tv| 成人av片在线观看| 成人免费视频网站在线观看| 国产69精品久久99不卡| 国产suv精品一区二区6| 国产大片一区二区| 国产成人免费视频网站高清观看视频 | 精品一区二区综合| 精品中文字幕一区二区小辣椒| 蜜臀av性久久久久蜜臀aⅴ流畅| 日韩成人dvd| 蜜桃久久久久久| 精品一区二区三区在线观看国产| 免费精品99久久国产综合精品| 免费人成精品欧美精品| 蜜桃精品视频在线观看| 国内偷窥港台综合视频在线播放| 极品少妇xxxx精品少妇偷拍| 狠狠色丁香久久婷婷综合_中| 久久99这里只有精品| 国产伦精品一区二区三区免费| 国产在线精品国自产拍免费| 国产精选一区二区三区| 国产aⅴ综合色| 一本大道久久精品懂色aⅴ | 3751色影院一区二区三区| 9191成人精品久久| 26uuu亚洲综合色欧美| 久久久亚洲国产美女国产盗摄 | 国产精品亚洲成人| 国产成人亚洲综合a∨婷婷图片 | 日本一区二区视频在线观看| 国产精品福利一区二区| 亚洲男人的天堂在线观看| 午夜精品爽啪视频| 久久国产精品72免费观看| 国产不卡在线播放| 在线观看免费亚洲| 日韩免费高清视频| 国产精品国产精品国产专区不片 | 欧美一级理论性理论a| 精品久久久久久久一区二区蜜臀| 久久免费电影网| 日韩美女久久久| 美腿丝袜亚洲三区| 91在线观看视频| 在线成人免费观看| 国产欧美日韩另类一区| 亚洲精品免费播放| 韩国成人在线视频| 91成人网在线| 久久久精品影视| 亚洲va国产va欧美va观看| 国产精品一区二区在线观看不卡| 色嗨嗨av一区二区三区| 欧美va日韩va| 一区二区三区免费| 国产一区二区三区av电影 | 欧美成人三级在线| 亚洲国产精品成人久久综合一区| 亚洲成人精品在线观看| 国产91精品露脸国语对白| 4hu四虎永久在线影院成人| 国产精品国产馆在线真实露脸 | 日韩黄色小视频| 97精品电影院| 久久亚洲精华国产精华液 | 国模娜娜一区二区三区| 在线观看日韩精品| 日本一区二区三区在线观看| 日日夜夜精品视频天天综合网| 91在线高清观看| 欧美国产日韩精品免费观看| 青青草97国产精品免费观看无弹窗版 | 午夜久久久影院| 91一区二区三区在线观看| 久久精品一区二区三区不卡| 丝袜国产日韩另类美女| 91国产视频在线观看| 亚洲欧洲精品一区二区三区| 国产电影精品久久禁18| 欧美成人video| 爽好久久久欧美精品| 欧美在线视频你懂得| 最新国产精品久久精品| 国产二区国产一区在线观看| 精品国产乱码久久久久久夜甘婷婷| 五月天国产精品| 欧美日韩日本视频| 亚洲国产你懂的| 欧美日韩午夜影院| 亚洲国产综合在线| 欧美日韩一区三区| 亚洲一区二区三区在线播放| 91免费看`日韩一区二区| 国产精品视频免费看| 国产91丝袜在线观看| 中文一区二区在线观看| 粉嫩av一区二区三区粉嫩| 久久色成人在线| 国产精品一区二区久激情瑜伽| 久久久精品欧美丰满| 国产在线精品不卡| 欧美国产日韩在线观看| 成人免费不卡视频| 亚洲人吸女人奶水| 91福利精品第一导航| 亚洲国产日日夜夜| 欧美丰满高潮xxxx喷水动漫| 偷窥国产亚洲免费视频| 欧美一区永久视频免费观看| 美女精品自拍一二三四| 久久久综合网站| 不卡的av中国片| 亚洲成人免费影院| 日韩一区二区中文字幕| 国产一区二三区好的| 国产免费成人在线视频| 99九九99九九九视频精品| 亚洲一区在线视频| 欧美大片一区二区三区| 韩国三级电影一区二区| 国产精品久久久久久久久免费樱桃 | 亚洲小说欧美激情另类| 欧美久久一二三四区| 久久国产尿小便嘘嘘尿| 国产精品久久久久久久午夜片| 日本精品一区二区三区高清| 婷婷综合在线观看| 国产亚洲1区2区3区| 色婷婷综合在线| 九色|91porny| 亚洲欧美日韩国产成人精品影院| 欧美美女激情18p|