165 lines
5.8 KiB
Tcl
165 lines
5.8 KiB
Tcl
|
#############################################################
|
||
|
# TkTeXEditor
|
||
|
# Distributed under GNU Public License
|
||
|
# Author: Sergey Kalinin (BanZaj) banzaj@lrn.ru
|
||
|
# Copyright (c) "CONERO lab", 2002, http://conero.lrn.ru
|
||
|
#############################################################
|
||
|
|
||
|
#############################################################
|
||
|
# Converts LaTeX formulas and texts to pixel graphics #
|
||
|
# #
|
||
|
# Required software: latex, convert (image magic) #
|
||
|
# to get color, the latex color package is required #
|
||
|
#############################################################
|
||
|
# Idea By Alex Dederer (aka Korwin) #
|
||
|
#############################################################
|
||
|
|
||
|
## SELECTED TEXT EXTRACT ##
|
||
|
proc GenerateFormula {type} {
|
||
|
global dir nb activeFile convert_cmd
|
||
|
set text $nb.f$activeFile.f.text
|
||
|
set pos [$text index insert]
|
||
|
set curLine [lindex [split $pos "."] 0]
|
||
|
set cursor [lindex [split $pos "."] 1]
|
||
|
set selIndex [$text tag ranges sel]
|
||
|
if {$selIndex != ""} {
|
||
|
set posBegin [lindex $selIndex 0]
|
||
|
set posEnd [lindex $selIndex 1]
|
||
|
set formula [$text get $posBegin $posEnd]
|
||
|
} else {
|
||
|
return
|
||
|
}
|
||
|
#set cmdString "$convert_cmd(img) -o [file join $dir(tmp) formula.gif] $formula"
|
||
|
#catch [exec $convert_cmd(img) -o [file join $dir(tmp) formula.gif] $formula] err
|
||
|
#if {$err != ""} {puts $err}
|
||
|
|
||
|
Render "$formula" $type ""
|
||
|
PreviewFormula
|
||
|
}
|
||
|
## PREVIEW CONVERTED IMAGE ##
|
||
|
proc PreviewFormula {} {
|
||
|
global nb font files color dir render
|
||
|
set node [$nb raise]
|
||
|
if {$node == "debug" || $node == ""} {
|
||
|
return
|
||
|
}
|
||
|
set w .formula
|
||
|
set text "$nb.f$node.f.text"
|
||
|
set pos [$nb.f[$nb raise].f.text index insert]
|
||
|
# set findString ""
|
||
|
# destroy the find window if it already exists
|
||
|
if {[winfo exists $w]} {
|
||
|
destroy $w
|
||
|
}
|
||
|
# create the new "find" window
|
||
|
toplevel $w
|
||
|
wm transient $w $nb.f$node
|
||
|
wm overrideredirect $w 1
|
||
|
set b_x [winfo pointerx .]
|
||
|
set b_y [expr [winfo pointery .] - 200]
|
||
|
wm geometry $w +$b_x+$b_y
|
||
|
|
||
|
set f1 [frame $w.frmFind -background $color(bg)]
|
||
|
pack $f1 -side top -fill x -expand true
|
||
|
|
||
|
image create photo formula -format gif -file [file join $dir(tmp) tle_render.gif]
|
||
|
|
||
|
label $f1.lblFind -background $color(bg) -image formula -relief ridge
|
||
|
pack $f1.lblFind -side left -padx 0 -pady 0
|
||
|
bind $w <Escape> "$text mark set insert $pos; $text see $pos; focus -force $text; destroy $w"
|
||
|
bind $w <Button-1> "$text mark set insert $pos; $text see $pos; focus -force $text; destroy $w"
|
||
|
focus -force $w
|
||
|
|
||
|
|
||
|
unset text pos w
|
||
|
}
|
||
|
## DOCUMENT HEADER READER ##
|
||
|
proc ReadHeader {widget} {
|
||
|
set posBegin [$widget search -regexp -- {\\documentclass} 0.0 end]
|
||
|
if {$posBegin != ""} {
|
||
|
set posEnd [$widget search -regexp -- {\\begin\{document\}} $posBegin end]
|
||
|
#puts "$posBegin - $posEnd"; return;# debug
|
||
|
if {$posEnd != ""} {
|
||
|
set text [$widget get $posBegin $posEnd]
|
||
|
} else {
|
||
|
set text ""
|
||
|
}
|
||
|
} else {
|
||
|
set text ""
|
||
|
}
|
||
|
return $text
|
||
|
}
|
||
|
|
||
|
## IMAGE GENERATOR WITH MATHEMATICS FORMALS AND TEXTS ##
|
||
|
proc Render {text type fileName} {
|
||
|
global dir convert_cmd render activeFile files nb
|
||
|
# Names for input and output files
|
||
|
set enc "[lindex $files($activeFile) 2]"
|
||
|
|
||
|
puts $files($activeFile) ;# debug
|
||
|
|
||
|
if {$fileName == ""} {
|
||
|
set name tle_render
|
||
|
set texFile $name.tex
|
||
|
set imgFile $name.$render(format)
|
||
|
set _dir $dir(tmp)
|
||
|
} else {
|
||
|
set imgFile [file tail $fileName]
|
||
|
set name [file rootname $imgFile]
|
||
|
set texFile $name.tex
|
||
|
set _dir [file dirname $fileName]
|
||
|
}
|
||
|
set txt $nb.f$activeFile.f.text
|
||
|
set header [ReadHeader $txt]
|
||
|
if {$header == ""} {
|
||
|
set header "\\documentclass\[12pt\]\{article\}\n\\usepackage\[$enc\]\{inputenc\}\n\\usepackage\[english,russian\]\{babel\}"
|
||
|
|
||
|
}
|
||
|
if {$type == "math"} {
|
||
|
append header "\\usepackage\{color\}\n\\pagestyle\{empty\}\n\\pagecolor\{$render(bg)\}\n"
|
||
|
append header "\\begin\{document\}\n\\begin\{eqnarray\*\}\n\{\n\\color\{$render(fg)\}"
|
||
|
set footer "\}\n\\end\{eqnarray*\}\n\\end\{document\}"
|
||
|
} elseif {$type == "text"} {
|
||
|
append header "\\usepackage\{color\}\n\n\\pagestyle\{empty\}\n"
|
||
|
append header "\\pagecolor\{$render(bg)\}\n\\begin\{document\}\n"
|
||
|
set footer "\\end\{document\}"
|
||
|
}
|
||
|
puts $header
|
||
|
set f [open [file join $dir(tmp) $texFile] w]
|
||
|
puts $f $header
|
||
|
puts $f $text
|
||
|
puts $f $footer
|
||
|
close $f
|
||
|
|
||
|
set err ""
|
||
|
catch [cd $dir(tmp)]
|
||
|
catch [exec $convert_cmd(dvi) -interaction=batchmode [file join $dir(tmp) $texFile]] err
|
||
|
catch [exec dvips -o $dir(tmp)/$name.eps -E $dir(tmp)/$name.dvi 2> /dev/null] err
|
||
|
# Transparent background
|
||
|
if {$render(trans) == 1} {
|
||
|
if {$render(aa) == 1} {
|
||
|
catch [exec $convert_cmd(img) +adjoin -antialias -transparent $render(bg) -density $render(res) $dir(tmp)/$name.eps $_dir/$imgFile] err
|
||
|
} else {
|
||
|
catch [exec $convert_cmd(img) +adjoin +antialias -transparent $render(bg) -density $render(res) $dir(tmp)/name.eps $_dir/$imgFile] err
|
||
|
}
|
||
|
} else {
|
||
|
if {$render(aa) == 1} {
|
||
|
catch [exec $convert_cmd(img) +adjoin -antialias -density $render(res) $dir(tmp)/$name.eps $_dir/$imgFile] err
|
||
|
} else {
|
||
|
catch [exec $convert_cmd(img) +adjoin +antialias -density $render(res) $dir(tmp)/$name.eps $_dir/$imgFile] err
|
||
|
}
|
||
|
}
|
||
|
if {$err != ""} {
|
||
|
set answer [tk_messageBox -message "$err"\
|
||
|
-type ok -icon warning -title [::msgcat::mc "Warning"]]
|
||
|
case $answer {
|
||
|
ok {return}
|
||
|
}
|
||
|
puts $err
|
||
|
}
|
||
|
catch [cd $dir(current)]
|
||
|
}
|
||
|
|
||
|
|
||
|
|