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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? 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

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品成人私密视频| 中文字幕一区二区三中文字幕| 午夜欧美电影在线观看| 日韩一级成人av| 国产麻豆91精品| 亚洲精品免费在线播放| 日韩欧美一级二级三级久久久| 成人黄色一级视频| 丝袜亚洲另类欧美| 国产欧美日韩精品在线| 欧美亚洲日本国产| 国产精品99精品久久免费| 亚洲一区在线观看视频| 久久久影视传媒| 欧美四级电影网| 国产成人在线观看| 五月天一区二区三区| 中文字幕亚洲在| 久久久.com| 日韩欧美国产电影| 欧美无乱码久久久免费午夜一区| 国产精品一二三| 午夜电影网亚洲视频| 中文字幕亚洲视频| 国产欧美一区二区精品性色| 91精品午夜视频| 在线观看日韩毛片| av爱爱亚洲一区| 国产高清精品在线| 国产在线国偷精品免费看| 免费视频最近日韩| 欧美在线观看你懂的| www.日本不卡| 不卡一区二区在线| 成人精品视频一区二区三区| 久久国产综合精品| 国内偷窥港台综合视频在线播放| 日本成人在线不卡视频| 日本va欧美va精品| 免费精品视频最新在线| 日本sm残虐另类| 国产永久精品大片wwwapp| 另类小说视频一区二区| 蜜臀va亚洲va欧美va天堂| 久久99精品久久久久婷婷| 国产资源在线一区| eeuss鲁一区二区三区| 91麻豆6部合集magnet| 91亚洲精品久久久蜜桃网站| 色婷婷综合五月| 欧美日本一区二区| 日韩欧美国产三级| 国产欧美综合在线| 亚洲一区在线观看免费| 日韩不卡一区二区| 国产精品自拍一区| 91麻豆精品在线观看| 欧美色综合网站| 欧美大胆一级视频| 国产精品久久久久久久久晋中| 一区二区三区欧美| 免费观看久久久4p| 成人av综合在线| 欧美日韩国产天堂| 国产情人综合久久777777| 亚洲综合图片区| 国产精品一二三四区| 日本精品视频一区二区三区| 欧美一级生活片| 欧美极品少妇xxxxⅹ高跟鞋 | 色综合久久久久综合99| 欧美日韩国产一级| 国产精品成人午夜| 美女在线一区二区| 欧美综合一区二区| 久久综合给合久久狠狠狠97色69| 亚洲欧美偷拍另类a∨色屁股| 图片区小说区区亚洲影院| 国产成人精品影院| 日韩一级免费观看| 亚洲一二三四久久| 99久久精品国产观看| 久久久久免费观看| 日韩成人精品在线| 欧美日韩国产欧美日美国产精品| 国产成人h网站| 久久久国产精品不卡| 国产在线播精品第三| 日韩免费视频一区| 日韩中文欧美在线| 在线亚洲免费视频| 亚洲精品视频一区| 国产91丝袜在线播放0| 91精品国产色综合久久ai换脸| 怡红院av一区二区三区| 北岛玲一区二区三区四区| 久久精品亚洲乱码伦伦中文| 全国精品久久少妇| 日韩一区二区在线观看视频播放| 亚洲国产成人tv| 欧美日韩精品高清| 亚洲成人tv网| 欧美一区二区在线播放| 日日摸夜夜添夜夜添国产精品| 欧美日韩国产经典色站一区二区三区 | 日韩久久精品一区| 精品一区二区三区影院在线午夜| 在线播放欧美女士性生活| 五月开心婷婷久久| 欧美一区二区在线播放| 日韩视频在线一区二区| 国产精品久久毛片av大全日韩| 成人午夜视频免费看| 丝袜国产日韩另类美女| 国产精品嫩草影院av蜜臀| 国产91精品在线观看| 日韩美女精品在线| 欧美日韩午夜影院| 久久99精品国产麻豆不卡| 亚洲精品一区二区三区影院| 国产91高潮流白浆在线麻豆| 亚洲少妇屁股交4| 欧美乱熟臀69xxxxxx| 久久精品国产一区二区| 中文字幕精品—区二区四季| 色天天综合久久久久综合片| 日韩黄色小视频| 中文字幕在线一区二区三区| 日韩欧美一区二区视频| 91在线一区二区三区| 久久国产精品99久久久久久老狼| 国产精品久久久久影院亚瑟| 欧美美女视频在线观看| 99免费精品在线| 久久精品国产99| 亚洲成人激情av| 国产精品乱码久久久久久| 精品国精品国产尤物美女| 欧美日韩国产片| 91视频在线看| 国产精品自拍一区| 综合欧美一区二区三区| 久久美女艺术照精彩视频福利播放| 欧美吞精做爰啪啪高潮| 欧美影院午夜播放| av电影天堂一区二区在线| 成人av影院在线| 成人av手机在线观看| 激情偷乱视频一区二区三区| 亚洲va天堂va国产va久| 亚洲日本在线a| 1区2区3区国产精品| 国产人成一区二区三区影院| 久久人人爽人人爽| 日本一区二区电影| 欧美国产国产综合| 国产午夜精品一区二区| 精品国一区二区三区| 日韩精品一区二区三区四区视频 | 国产三级三级三级精品8ⅰ区| 日韩亚洲电影在线| 欧美电影免费观看高清完整版在线 | 日韩一区二区免费高清| av激情成人网| 久久精品国产一区二区三 | 久久久国产一区二区三区四区小说| 欧美性一二三区| 91精品国产综合久久精品图片| 欧美日韩免费一区二区三区| 欧日韩精品视频| 欧美色图天堂网| 在线免费观看视频一区| 成人动漫一区二区在线| 色婷婷一区二区三区四区| 波多野结衣中文字幕一区二区三区| 成人app在线观看| 在线观看亚洲一区| 欧美一二三在线| 538在线一区二区精品国产| 日韩一级黄色大片| 中文字幕一区二区在线播放| 亚洲妇女屁股眼交7| 久久成人免费电影| www.欧美色图| 欧美中文字幕一区二区三区 | 欧美日韩大陆一区二区| 26uuu亚洲综合色| 中文字幕在线播放不卡一区| 亚洲成人av电影在线| 国产99久久精品| 欧美精品一卡二卡| 国产精品久久三| 美国欧美日韩国产在线播放| 91亚洲永久精品| 精品电影一区二区三区| 久久精品99久久久| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 久久国产精品色| 欧美做爰猛烈大尺度电影无法无天| 久久久精品人体av艺术|