########################################################### # Tcl/Tk Project Manager # # version 0.0.1 # # TCL highlight file # # Copyright (c) "Sergey Kalinin", 2001, http://nuk-svk.ru # # Author: Sergey Kalinin banzaj28@yandex.ru # ########################################################### proc HighLightPHP {text line lineNumber node} { global fontNormal fontBold editorFontBold tree imgDir noteBook global editor color global beginQuote endQuote endQuotePrev # set pos [$text index insert] # set lineNumber [lindex [split $pos "."] 0] set startIndex 0 # bind text tags for highlightning # $text tag configure bold -font $editor(fontBold) $text tag configure procName -font $editor(fontBold) -foreground $color(procName) $text tag configure keyWord -foreground $color(keyWord) $text tag configure comments -foreground $color(comments) $text tag configure variable -foreground $color(var) $text tag configure string -foreground $color(string) $text tag configure braceHighLight -font $editor(fontBold)\ -foreground $color(braceBG) -background $color(braceFG) $text tag configure brace -foreground $color(brace) $text tag configure percent -foreground $color(percent) $text tag configure bindKey -foreground $color(bindKey) $text tag configure rivet -foreground $color(bindKey) -font $editor(fontBold) -foreground "#ff8800" ;#-background "#c6c6c6" $text tag configure sql -font $editor(fontBold) -foreground $color(sql) # incr lineNumber set keyWord [info commands] # for OOP extention foreach n {class method attribute constructor destructor invariant attribute binding new delete \ mcset mc mclocale mcpreferences mcload mcunknown configure match else elseif} { lappend keyWord $n } foreach n {var include_once include function case echo select from where in order by and or} { lappend keyWord $n } set dataType {true false} set sqlOperators {select from where and or count sum in order cast as by} set a "" set startPos 0 set endPos 0 set length 0 set workLine $line while {$workLine != ""} { if {[regexp "(^|\t| )\[a-zA-Z\\_:\]+" $workLine word]} { set length [string length $word] set startPos [string first [string trim $word] $line] set endPos [expr $startPos + $length] set workLine [string range $workLine $length end] if {[lsearch $keyWord [string trim $word]] != -1} { $text tag add keyWord $lineNumber.$startPos $lineNumber.$endPos } if {[lsearch $dataType [string trim $word]] != -1} { $text tag add bold $lineNumber.$startPos $lineNumber.$endPos } if {[lsearch $sqlOperators [string trim $word]] != -1} { $text tag add sql $lineNumber.$startPos $lineNumber.$endPos } if {[string trim $word]=="proc"} { $text tag add procName $lineNumber.[expr $startPos + $length] $lineNumber.[string wordend $line [expr $startPos + $length +2]] } set startPos [expr $endPos + 1] } else { break } } set workLine $line while {$workLine != ""} { if {[regexp {(\{|\[)[a-zA-Z\\_:]+} $workLine word v]} { set word [string trim $word $v] set length [string length $word] set startPos [string first [string trim $word] $line] set endPos [expr $startPos + $length] set workLine [string range $workLine $length end] if {[lsearch $keyWord [string trim $word]] != -1} { $text tag add keyWord $lineNumber.$startPos $lineNumber.$endPos } if {[string trim $word]=="proc"} { $text tag add procName $lineNumber.[expr $startPos + $length] $lineNumber.[string wordend $line [expr $startPos + $length +2]] } set startPos [expr $endPos + 1] } else { break } } # key binding highlight set startPos 0 set workLine $line while {$workLine != ""} { if {[regexp "( \t\])|>" $workLine a]} { set start [string first $a $workLine] set end $start incr end [string length $a] set workLine [string range $workLine $end end] incr start $startPos incr end $startPos $text tag add keyWord $lineNumber.$start $lineNumber.$end set startPos $end } else { break } } # variable highlight # set startPos 0 set workLine $line while {$workLine != ""} { if {[regexp "\\$\[a-zA-Z\\_:\]+" $workLine a]} { set start [string first $a $workLine] set end $start incr end [string length $a] set workLine [string range $workLine $end end] incr start $startPos incr end $startPos if {$a != ""} { $text tag add variable $lineNumber.$start $lineNumber.$end } set startPos $end } else { break } } # persent % highlight set startPos 0 set workLine $line while {$workLine != ""} { if {[regexp "\%" $workLine a b]} { set start [string first $a $workLine] set end $start incr end [string length $a] set workLine [string range $workLine $end end] incr start $startPos incr end $startPos $text tag add percent $lineNumber.$start $lineNumber.$end set startPos $end } else { break } } # DEDERER # hightlight [, {, }, ] set startPos 0 set workLine $line while {$workLine != ""} { if {[regexp {\(|\[|{|}|\]|\)} $workLine a b]} { set start [string first $a $workLine] set end $start incr end [string length $a] set workLine [string range $workLine $end end] incr start $startPos incr end $startPos $text tag add bold $lineNumber.$start $lineNumber.$end set startPos $end } else { break } } set startPos 0 set workLine $line while {$workLine != ""} { if {[regexp {\<\?|\?>} $workLine a b]} { set start [string first $a $workLine] set end $start incr end [string length $a] set workLine [string range $workLine $end end] incr start $startPos incr end $startPos $text tag add rivet $lineNumber.$start $lineNumber.end set startPos $end } else { break } } # string " " highlight set startPos 0 set workLine $line while {$workLine != ""} { if {[regexp "\".*?\"" $workLine a b]} { set start [string first $a $workLine] set end $start incr end [string length $a] set workLine [string range $workLine $end end] incr start $startPos incr end $startPos $text tag add string $lineNumber.$start $lineNumber.$end set startPos $end } else { break } } # parameter for command hightlight set startPos 0 set workLine $line while {$workLine != ""} { if {[regexp -- {\s-\w+(?=\s)} $workLine a b]} { set start [expr [string first $a $workLine] + 1] set end $start incr end [string length $a] set workLine [string range $workLine $end end] incr start $startPos incr end $startPos $text tag add bindKey $lineNumber.$start $lineNumber.$end set startPos $end } else { break } } set startPos 0 set workLine $line while {$workLine != ""} { if {[regexp "" $workLine a]} { set start [string first $a $workLine] set end $start incr end [string length $a] set workLine [string range $workLine $end end] incr start $startPos incr end $startPos $text tag add coments $lineNumber.$start $lineNumber.$end set startPos $end } else { break } } # add comment # set workLine [$text get $lineNumber.0 $lineNumber.end] if {[regexp -indices "(^|\t|;| )//" $workLine begin]} { set p [lindex $begin 0] $text tag add comments $lineNumber.[expr $p - 0] $lineNumber.end } elseif {[regexp -indices {(^|\t|;| )/\*} $workLine beginIndex]} { set beginQuote "$lineNumber.[lindex $beginIndex 0]" set endQuote [$text search -forward -regexp -- {\*/} $beginQuote end] if {$endQuote != ""} { $text tag add comments $beginQuote "$endQuote + 2 chars" } else { $text tag add comments $beginQuote end } set endQuotePrev [$text search -backward -regexp -- {\*/} [expr $lineNumber - 1].end 0.0] if {$endQuotePrev != ""} { $text tag remove comments "$endQuotePrev + 2 chars" $beginQuote } } elseif {[regexp -indices {\*/} $workLine endIndex]} { set endQuote "$lineNumber.[lindex $endIndex 1]" set beginQuote [$text search -backward -regexp -- {/\*} $endQuote 0.0] if {$beginQuote != ""} { $text tag add comments $beginQuote "$endQuote + 1 chars" } else { $text tag add comments 0.0 "$endQuote + 1 chars" } set beginQuoteNext [$text search -forward -regexp -- {/\*} $endQuote end] if {$beginQuoteNext != ""} { $text tag remove comments "$endQuote + 2 chars" $beginQuoteNext } } else { if {[lindex [split $beginQuote "."] 0] <= $lineNumber && [lindex [split $endQuote "."] 0] >= $lineNumber} { #$text tag add comments $lineNumber.0 $lineNumber.end } else { $text tag remove comments $lineNumber.0 $lineNumber.end } } }