403 lines
14 KiB
Tcl
403 lines
14 KiB
Tcl
|
######################################################
|
|||
|
# TkTeXeditor
|
|||
|
# Distributed under GNU Public License
|
|||
|
# Author: Sergey Kalinin (BanZaj) banzaj@lrn.ru
|
|||
|
# Copyright (c) "CONERO lrn", 2000, http//conero.lrn.ru
|
|||
|
######################################################
|
|||
|
set types {
|
|||
|
{"TeX files" {.tex}}
|
|||
|
{"Html files" {.html}}
|
|||
|
{"Text files" {.txt}}
|
|||
|
{"All files" *}
|
|||
|
}
|
|||
|
set typeImage {
|
|||
|
{"GIF files" {.gif}}
|
|||
|
{"PNG files" {.png}}
|
|||
|
{"JPEG files" {.jpeg}}
|
|||
|
{"All files" *}
|
|||
|
}
|
|||
|
|
|||
|
proc FileDialog {operation} {
|
|||
|
global dir font tree nb files treeStruct in lastNode \
|
|||
|
activeFile color status lblList ver sysenc release types
|
|||
|
## settings variable for tree section ##
|
|||
|
set in(c) 0 ;# chapter counter
|
|||
|
set in(p) 0 ;# part counter
|
|||
|
set in(s) 0 ;# section counter
|
|||
|
set in(ss) 0 ;# subsection counter
|
|||
|
set in(sss) 0 ;# subsubsection counter
|
|||
|
set in(par) 0 ;# paragraph cponter
|
|||
|
set in(spar) 0 ;# subparagraph cponter
|
|||
|
set lastNode "root"
|
|||
|
|
|||
|
|
|||
|
if {$operation == "new"} {
|
|||
|
NewFileDialog
|
|||
|
} elseif {$operation == "new_templ"} {
|
|||
|
TemplateDialog
|
|||
|
} elseif {$operation == "open"} {
|
|||
|
set file [tk_getOpenFile -initialdir $dir(current) -filetypes $types -parent .]
|
|||
|
#puts "$file"
|
|||
|
if {$file == ""} {return}
|
|||
|
# call EditFile procedure
|
|||
|
EditFile $file
|
|||
|
} elseif {$operation == "save"} {
|
|||
|
if [info exists activeFile] {
|
|||
|
set node $activeFile
|
|||
|
} else {
|
|||
|
#set node [$nb raise]
|
|||
|
return
|
|||
|
}
|
|||
|
if {$node == "newproj" || $node == "" || $node == "debug"} {
|
|||
|
return
|
|||
|
}
|
|||
|
if {[info exists files($node)] == 0} {
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
set text "$nb.f$node.f.text"
|
|||
|
set fullPath [lindex $files($node) 0]
|
|||
|
set encode [lindex $files($node) 2] ;# document encoding
|
|||
|
set folder [file dirname $fullPath]
|
|||
|
set file [file tail $fullPath]
|
|||
|
#set contents [encoding convertfrom $sysenc [$text get 0.0 end]]
|
|||
|
#set contents [encoding convertto $encode [$text get 0.0 end]]
|
|||
|
if {[CheckEncoding $text] == 0} {
|
|||
|
return
|
|||
|
}
|
|||
|
set contents [$text get 0.0 end]
|
|||
|
set fhandle [open [file join $folder $file] "w"]
|
|||
|
fconfigure $fhandle -encoding $encode
|
|||
|
puts $fhandle $contents nonewline
|
|||
|
close $fhandle
|
|||
|
|
|||
|
#UpdateStruct $fullPath
|
|||
|
if {[lindex $files($node) 1] == 1} {
|
|||
|
set files($node) [list [lindex $files($node) 0] 0 [lindex $files($node) 2]]
|
|||
|
$status(active) configure -text [::msgcat::mc "File saved"]
|
|||
|
$nb itemconfigure $node -foreground $color(editTitleNormal)
|
|||
|
}
|
|||
|
UpdateStruct $fullPath $node
|
|||
|
} elseif {$operation == "save_as"} {
|
|||
|
if [info exists activeFile] {
|
|||
|
set node $activeFile
|
|||
|
#set node [$nb raise]
|
|||
|
} else {
|
|||
|
return
|
|||
|
}
|
|||
|
if {$node == "newproj" || $node == "settings" || $node == "about" || $node == ""} {
|
|||
|
return
|
|||
|
}
|
|||
|
if {[info exists files($node)] == 0} {
|
|||
|
return
|
|||
|
}
|
|||
|
set fullPath [lindex $files($node) 0]
|
|||
|
set folder [file dirname $fullPath]
|
|||
|
set file [file tail $fullPath]
|
|||
|
set encode [lindex $files($node) 2] ;# document encoding
|
|||
|
set file [tk_getSaveFile -initialdir $dir(current) -filetypes $types -parent .\
|
|||
|
-initialfile $file -defaultextension .tex]
|
|||
|
if {$file == ""} {return}
|
|||
|
set text "$nb.f$node.f.text"
|
|||
|
set contents [$text get 0.0 end]
|
|||
|
set fhandle [open [file join $folder $file] "w"]
|
|||
|
fconfigure $fhandle -encoding $encode
|
|||
|
|
|||
|
puts $fhandle $contents nonewline
|
|||
|
close $fhandle
|
|||
|
if {[lindex $files($node) 1] == 1} {
|
|||
|
set files($node) [list [lindex $files($node) 0] 0 $encode]
|
|||
|
$status(active) configure -text [::msgcat::mc "File saved"]
|
|||
|
$nb itemconfigure $node -foreground $color(editTitleNormal)
|
|||
|
}
|
|||
|
UpdateStruct $fullPath $node
|
|||
|
} elseif {$operation == "save_all"} {
|
|||
|
# SAVE ALL PROCEDURE
|
|||
|
set i 0
|
|||
|
set nodeList [$nb pages 0 end]
|
|||
|
set length [llength $nodeList]
|
|||
|
while {$i < $length} {
|
|||
|
set nbNode [lindex $nodeList $i]
|
|||
|
if {$nbNode != "debug"} {
|
|||
|
set text "$nb.f$nbNode.f.text"
|
|||
|
set savedFile [lindex $files($nbNode) 0]
|
|||
|
set encode [lindex $files($nbNode) 2] ;# document encoding
|
|||
|
set contents [$text get 0.0 end]
|
|||
|
set fhandle [open $savedFile "w"]
|
|||
|
fconfigure $fhandle -encoding $encode
|
|||
|
puts $fhandle $contents nonewline
|
|||
|
close $fhandle
|
|||
|
if {[lindex $files($nbNode) 1] == 1} {
|
|||
|
set files($nbNode) [list [lindex $files($nbNode) 0] 0 $encode]
|
|||
|
$status(active) configure -text [::msgcat::mc "File saved"]
|
|||
|
$nb itemconfigure $nbNode -foreground $color(editTitleNormal)
|
|||
|
}
|
|||
|
}
|
|||
|
incr i
|
|||
|
}
|
|||
|
Timer "empty" "autosave"
|
|||
|
} elseif {$operation == "close"} {
|
|||
|
set node [$nb raise]
|
|||
|
if {$node == ""} {return}
|
|||
|
if {$node == "debug"} {
|
|||
|
$nb delete $node
|
|||
|
$nb raise [$nb page 0]
|
|||
|
return
|
|||
|
}
|
|||
|
set childrenNode [$tree nodes $node]
|
|||
|
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
if {$childrenNode != ""} {
|
|||
|
for {set i 0} {$i <= [llength $childrenNode]} {incr i} {
|
|||
|
if {[info exists files([lindex $childrenNode $i])] == 1} {
|
|||
|
CloseNode [lindex $childrenNode $i]
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
CloseNode $node
|
|||
|
} elseif {$operation == "close_all"} {
|
|||
|
set nodeList [$nb pages 0 end]
|
|||
|
$nb raise [$nb page 0]
|
|||
|
set nbNode [$nb raise]
|
|||
|
while {$nbNode != ""} {
|
|||
|
if {[info exists files($nbNode)] == 1} {
|
|||
|
if {[lindex $files($nbNode) 1] == 1} {
|
|||
|
set f [lindex $files($nbNode) 0]
|
|||
|
set f [file tail $f]
|
|||
|
set answer [tk_messageBox\
|
|||
|
-message "$f [::msgcat::mc "File was modifyed. Save?"]"\
|
|||
|
-type yesnocancel -icon warning\
|
|||
|
-title [::msgcat::mc "Warning"]]
|
|||
|
case $answer {
|
|||
|
yes {FileDialog save}
|
|||
|
no {}
|
|||
|
cancel {return}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
$tree delete $nbNode
|
|||
|
$nb delete $nbNode
|
|||
|
$nb raise [$nb page 0]
|
|||
|
set nbNode [$nb raise]
|
|||
|
}
|
|||
|
} elseif {$operation == "quit_close_all"} {
|
|||
|
set nodeList [$nb pages 0 end]
|
|||
|
$nb raise [$nb page 0]
|
|||
|
set nbNode [$nb raise]
|
|||
|
set fhandle [open [file join $dir(work) bookmarks] "w"]
|
|||
|
while {$nbNode != ""} {
|
|||
|
if {[info exists files($nbNode)] == 1} {
|
|||
|
set f [lindex $files($nbNode) 0]
|
|||
|
puts $f
|
|||
|
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
set text "$nb.f$nbNode.f.text"
|
|||
|
puts $fhandle "$f [$text index insert]"
|
|||
|
puts "$f [$text index insert]"
|
|||
|
if {[lindex $files($nbNode) 1] == 1} {
|
|||
|
set f [file tail $f]
|
|||
|
set answer [tk_messageBox\
|
|||
|
-message "$f [::msgcat::mc "File was modifyed. Save?"]"\
|
|||
|
-type yesnocancel -icon warning\
|
|||
|
-title [::msgcat::mc "Warning"]]
|
|||
|
case $answer {
|
|||
|
yes {FileDialog save}
|
|||
|
no {}
|
|||
|
cancel {return 0}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
$tree delete $nbNode
|
|||
|
$nb delete $nbNode
|
|||
|
$nb raise [$nb page 0]
|
|||
|
set nbNode [$nb raise]
|
|||
|
}
|
|||
|
close $fhandle
|
|||
|
}
|
|||
|
}
|
|||
|
proc NewFile {fileName} {
|
|||
|
global dir workDir tree nb font
|
|||
|
destroy .addtoproj
|
|||
|
|
|||
|
set type [string trim [file extension $fileName] {.}]
|
|||
|
if {$type == "tcl"} {
|
|||
|
set img "tcl"
|
|||
|
} elseif {$type == "tk"} {
|
|||
|
set img "tk"
|
|||
|
} elseif {$type == "txt"} {
|
|||
|
set img "file"
|
|||
|
} elseif {$type == "html"} {
|
|||
|
set img "html"
|
|||
|
} else {
|
|||
|
set img "file"
|
|||
|
}
|
|||
|
#set subNode [InsertTreeNode $fileName $dir(doc)]
|
|||
|
if [info exists dir(current)] {
|
|||
|
set file [file join $dir(current) $fileName]
|
|||
|
} else {
|
|||
|
set file [file join $dir(doc) $fileName]
|
|||
|
}
|
|||
|
|
|||
|
#puts $file
|
|||
|
#InsertTitle $file $type
|
|||
|
if {[file exists $file] == 0} {
|
|||
|
set fHandle [open "$file" a+]
|
|||
|
close $fHandle
|
|||
|
}
|
|||
|
EditFile $file
|
|||
|
}
|
|||
|
## ADD FILE INTO PROJECT DIALOG##
|
|||
|
proc NewFileDialog {} {
|
|||
|
global dir
|
|||
|
set w .addtoproj
|
|||
|
if {[winfo exists $w]} {
|
|||
|
destroy $w
|
|||
|
}
|
|||
|
# create the new "goto" window
|
|||
|
toplevel $w
|
|||
|
wm title $w [::msgcat::mc "Create new file"]
|
|||
|
wm resizable $w 0 0
|
|||
|
wm transient $w .
|
|||
|
|
|||
|
frame $w.frmCanv -border 1 -relief sunken
|
|||
|
frame $w.frmBtn -border 1 -relief sunken
|
|||
|
pack $w.frmCanv -side top -fill both -padx 1 -pady 1
|
|||
|
pack $w.frmBtn -side top -fill x
|
|||
|
|
|||
|
label $w.frmCanv.lblImgTcl -text [::msgcat::mc "Input file name"]
|
|||
|
entry $w.frmCanv.entImgTcl
|
|||
|
pack $w.frmCanv.lblImgTcl $w.frmCanv.entImgTcl -expand true -padx 5 -pady 5 -side top
|
|||
|
|
|||
|
button $w.frmBtn.btnOk -text [::msgcat::mc "Create"] -relief groove -command {
|
|||
|
NewFile [.addtoproj.frmCanv.entImgTcl get]
|
|||
|
}
|
|||
|
button $w.frmBtn.btnCancel -text [::msgcat::mc "Close"] -command "destroy $w" -relief groove
|
|||
|
pack $w.frmBtn.btnOk $w.frmBtn.btnCancel -padx 2 -pady 2 -fill x -side left
|
|||
|
|
|||
|
bind $w <Escape> "destroy .addtoproj"
|
|||
|
bind $w.frmCanv.entImgTcl <Return> {
|
|||
|
NewFile [.addtoproj.frmCanv.entImgTcl get]
|
|||
|
}
|
|||
|
focus -force $w.frmCanv.entImgTcl
|
|||
|
$w.frmCanv.entImgTcl insert 0 "name.tex"
|
|||
|
}
|
|||
|
|
|||
|
proc FileAttr {file} {
|
|||
|
global tcl_platform
|
|||
|
set fileAttribute ""
|
|||
|
# get file modify time
|
|||
|
if {$tcl_platform(platform) == "windows"} {
|
|||
|
|
|||
|
} elseif {$tcl_platform(platform) == "mac"} {
|
|||
|
|
|||
|
} elseif {$tcl_platform(platform) == "unix"} {
|
|||
|
set unixTime [file mtime $file]
|
|||
|
set modifyTime [clock format $unixTime -format "%d/%m/%Y, %H:%M"]
|
|||
|
append fileAttribute $modifyTime
|
|||
|
}
|
|||
|
# get file size
|
|||
|
set size [file size $file]
|
|||
|
if {$size < 1024} {
|
|||
|
set fileSize "$size b"
|
|||
|
}
|
|||
|
if {$size >= 1024} {
|
|||
|
set s [expr ($size.0) / 1024]
|
|||
|
set dot [string first "\." $s]
|
|||
|
set int [string range $s 0 [expr $dot - 1]]
|
|||
|
set dec [string range $s [expr $dot + 1] [expr $dot + 2]]
|
|||
|
set fileSize "$int.$dec Kb"
|
|||
|
}
|
|||
|
if {$size >= 1048576} {
|
|||
|
set s [expr ($size.0) / 1048576]
|
|||
|
set dot [string first "\." $s]
|
|||
|
set int [string range $s 0 [expr $dot - 1]]
|
|||
|
set dec [string range $s [expr $dot + 1] [expr $dot + 2]]
|
|||
|
set fileSize "$int.$dec Mb"
|
|||
|
}
|
|||
|
append fileAttribute ", $fileSize"
|
|||
|
}
|
|||
|
|
|||
|
## REMOVED SELECTED TEXT INTO FILE AND INCLUDE THEM ##
|
|||
|
proc SaveToFile {action} {
|
|||
|
global nb activeFile files dir types typeImage
|
|||
|
set text $nb.f$activeFile.f.text
|
|||
|
set selIndex [$text tag ranges sel]
|
|||
|
if {$selIndex != ""} {
|
|||
|
set posBegin [lindex $selIndex 0]
|
|||
|
set posEnd [lindex $selIndex 1]
|
|||
|
set contents [$text get $posBegin $posEnd]
|
|||
|
} else {
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
set enc "[lindex $files($activeFile) 2]"
|
|||
|
set contents [encoding convertto $enc $contents]
|
|||
|
set contents [encoding convertfrom $enc $contents]
|
|||
|
|
|||
|
if {$action == "image"} {
|
|||
|
set file [tk_getSaveFile -initialdir $dir(current) -filetypes $typeImage -parent .\
|
|||
|
-title [::msgcat::mc "Save as"] -initialfile new_name.gif -defaultextension .gif]
|
|||
|
if {$file == ""} {return}
|
|||
|
Render $contents text $file
|
|||
|
} else {
|
|||
|
set file [tk_getSaveFile -initialdir $dir(current) -filetypes $types -parent .\
|
|||
|
-title [::msgcat::mc "Save as"] -initialfile new_name.tex -defaultextension .tex]
|
|||
|
if {$file == ""} {return}
|
|||
|
set fHandle [open $file w]
|
|||
|
puts $fHandle $contents
|
|||
|
close $fHandle
|
|||
|
}
|
|||
|
if {$action == "remove"} {
|
|||
|
$text delete $posBegin $posEnd
|
|||
|
$text insert $posBegin "\n\\input\{[file rootname $file]\}\n"
|
|||
|
}
|
|||
|
PageRaise $activeFile
|
|||
|
}
|
|||
|
|
|||
|
proc CloseNode {node} {
|
|||
|
global dir font tree nb files treeStruct in lastNode activeFile color status lblList ver sysenc release types
|
|||
|
if {$node == "debug"} {$nb delete $node; $nb raise [$nb page 0]; set node [$nb raise]; return}
|
|||
|
|
|||
|
if {[info exists files($node)] == 1} {
|
|||
|
if {[lindex $files($node) 1] == 1} {
|
|||
|
set f [lindex $files($node) 0]
|
|||
|
set f [file tail $f]
|
|||
|
set answer [tk_messageBox\
|
|||
|
-message "$f [::msgcat::mc "File was modifyed. Save?"]"\
|
|||
|
-type yesnocancel -icon warning\
|
|||
|
-title [::msgcat::mc "Warning"]]
|
|||
|
case $answer {
|
|||
|
yes {FileDialog save}
|
|||
|
no {}
|
|||
|
cancel {return}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
PageTab -1
|
|||
|
$nb delete $node
|
|||
|
unset files($node)
|
|||
|
set parentNode [$tree parent $node]
|
|||
|
set curNode [$tree selection get]
|
|||
|
if {[$tree parent $node] == "root"} {
|
|||
|
if {[$tree exists $node] == 1} {
|
|||
|
$tree delete $node
|
|||
|
}
|
|||
|
}
|
|||
|
#$nb raise [$nb page 0]
|
|||
|
#set node [$nb raise]
|
|||
|
ClickTab $node
|
|||
|
$treeStruct delete [$treeStruct nodes root]
|
|||
|
$lblList delete [$lblList item 0 end]
|
|||
|
wm title . "TkLaTeXEditor $ver\($release\)"
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|