Initial commit

This commit is contained in:
svk28
2017-07-13 12:45:37 +03:00
commit 87496f7fb0
446 changed files with 14655 additions and 0 deletions

1
lib/command/afterpage.lst Executable file
View File

@@ -0,0 +1 @@
\afterpage{}

2
lib/command/amsbsy.lst Executable file
View File

@@ -0,0 +1,2 @@
\boldsymbol
\pmb{}

6
lib/command/amscd.lst Executable file
View File

@@ -0,0 +1,6 @@
@(((
@)))
@<<<
@>>>
@AAA
@VVV

2
lib/command/amsfonts.lst Executable file
View File

@@ -0,0 +1,2 @@
\mathbb
\mathfrac

59
lib/command/amsmath.lst Executable file
View File

@@ -0,0 +1,59 @@
\\*
\\
\Big
\big
\Bigg
\bigg
\biggl
\Biggr
\biggr
\bigl
\Bigm
\binom{}{}{}{}{}{}
\cfrac[]{}{}
\dbinom{}{}{}{}{}{}
\ddddot{}
\dddot{}
\ddots{}
\dfrac{}{}
\dots
\dotsb
\dotsc
\dotsi
\dotsm
\fracwithdelims()[]
\genfrac{}{}{}{}{}{}
\idotsint
\leftroot
\measuredangle
\mod
\nolimits
\operatorname{}
\overset
\pmod
\pod
\rVert
\rvert
\xrightarrow
\sideset
\smash\spbreve
\spcheck
\spdddot
\spddot
\spdot
\special
\sphat
\sptilde
\stackrel
\tag{}
\tag*{}
\tbinom{}{}{}{}{}{}
\tfrac
\uproot
\varinjlim
\varliminf
\varlimsup
\varprojlim
Vmatrix
vmatrix

486
lib/command/amssymb.lst Executable file
View File

@@ -0,0 +1,486 @@
\{
\|
\}
\aleph
\hat
\check
\acute
\grave
\bar
\vec
\dot
\ddot
\breve
\tilde
\allowdisplaybreaks
\alpha
\angle
\approx
\approxeq
\arccos
\arcsin
\arctan
\arg
\Arrowvert
\arrowvert
\ast
\asymp
\backepsilon
\backprime
\backsim
\backsimeq
\backslash
\barwedge
\Bbbk
\because
\beta
\beth
\between
\bigcap
\bigcirc
\bigcup
\bigodot
\bigoplus
\bigotimes
\bigsqcup
\bigstar
\bigstrutjot
\bigtriangledown
\bigtriangleup
\biguplus
\bigvee
\bigwedge
\blacklozenge
\blacksquare
\blacktriangle
\blacktriangledown
\blacktriangleleft
\blacktriangleright
\bot
\bowtie
\Box
\boxdot
\boxminus
\boxplus
\boxtimes
\bracevert
\bullet
\Bumpeq
\bumpeq
\Cap
\cap
\cdot
\cdots
\centerdot
\chi
\circ
\circeq
\circlearrowleft
\circlearrowright
\circledast
\circledcirc
\circleddash
\circledS
\clubsuit
\complement
\cong
\coprod
\cos
\cosh
\cot
\coth
\csc
\Cup
\cup
\curlyeqprec
\curlyeqsucc
\curlyvee
\curlywedg
\curvearrowleft
\curvearrowright
\dagger
\daleth
\dashleftarrow
\dashrightarrow
\dashv
\ddagger
\deg
\Delta
\delta
\det
\diagdown
\diagup
\Diamond
\diamond
\diamondsuit
\digamma
\dim
\div
\divideontimes
\dot
\doteq
\doteqdot
\dotplus
\doublebarwedge
\Downarrow
\downarrow
\downdownarrows
\downharpoonleft
\downharpoonright
\ell
\emptyset
\epsilon
\eqcirc
\eqslantgtr
\eqslantless
\equiv
\eta
\eth
\exists
\exp
\fallingdotseq
\Finv
\flat
\forall
\frac
\frown
\Game
\Gamma
\gamma
\gcd
\geq
\geqq
\geqslant
\gg
\ggg
\gimel
\gnapprox
\gneq
\gneqq
\gnsim
\grave
\gtrapprox
\gtrdot
\gtreqless
\gtreqqless
\gtrless
\gtrsim
\gvertneqq
\hat
\hbar
\heartsuit
\hom
\hookleftarrow
\hookrightarrow
\hslash
\iiiint
\iiint
\iint
\Im
\imath
\in
\inf
\infty
\int
\intercal
\iota
\jmath
\Join
\kappa
\ker
\Lambda
\lambda
\langle
\lceil
\ldots
\le
\Leftarrow
\leftarrow
\leftarrowtail
\leftharpoondown
\leftharpoonup
\leftleftarrows
\Leftrightarrow
\leftrightarrow
\leftrightarrows
\leftrightharpoons
\leftrightsquigarrow
\leftthreetimes
\leq
\leqq
\leqslant
\lessapprox
\lessdot
\lesseqgtr
\lesseqqgtr
\lessgtr
\lesssim
\lfloor
\lg
\lgroup
\lhd
\lim
\liminf
\limsup
\ll
\llcorner
\Lleftarrow
\lll
\lmoustache
\ln
\lnapprox
\lneq
\lneqq
\lnsim
\log
\Longleftarrow
\longleftarrow
\Longleftrightarrow
\longleftrightarrow
\longmapsto
\Longrightarrow
\longrightarrow
\looparrowleft
\looparrowright
\lozenge
\lrcorner
\Lsh
\lltimes
\lvertneqq
\mapsto
\mathbb
\max
\mho
\mid
\min
\models
\mp
\mu
\multimap
\nabla
\natural
\ncong
\nearrow
\neg
\neq
\nexists
\ngeq
\ngeqq
\ngeqslant
\ngtr
\ni
\nLeftarrow
\nleftarrow
\nLeftrightarrow
\nleftrightarrow 258
\nleq
\nleqq
\nleqslant
\nless
\nmid
\nparallel
\nprec
\npreceq
\nRightarrow
\nrightarrow
\nshortmid
\nshortparallel
\nsim
\nsubseteq
\nsucc
\nsucceq
\nsupseteq
\nsupseteqq
\ntriangleleft
\ntrianglelefteq
\ntriangleright
\ntrianglerighteq
\nu
\numberwithin
\nVDash
\nvDash
\nvdash
\nwarrow
\odot
\oint
\Omega
\omega
\ominus
\oplus
\oslash
\otimes
\overbrace
\overleftarrow
\overline
\overrightarrow
\parallel
\partial
\perp
\Phi
\phi
\Pi
\pi
\pitchfork
\pm
\pmb
\Pr
\prec
\precapprox
\preccurlyeq
\preceq
\precnapprox
\precnsim
\precsim
\prime
\prod
\propto
\Psi
\psi
\rangle
\rceil
\Re
\real
\rfloor
\rgroup
\rhd
\rho
\Rightarrow
\rightarrow
\rightarrowtail
\rightharpoondown
\rightharpoonup
\rightleftarrows
\rightleftharpoons
\rightrightarrows
\rightsquigarrow
\rightthreetimes
\risingdotseq
\rmoustache
\Rsh
\rtimes
\Xi
\xi
\zeta
\wedge
\widehat
\widetilde
\wp
\wr
\searrow
\sec
\setminus
\sharp
\shortmid
\shortparallel
\Sigma
\sigma
\sim
\simeq
\sin
\sinh
\smallfrown
\smallsetminus
\smallsmile
\smile
\spadesuit
\sphericalangle
\sqcap
\sqcup
\sqrt
\sqsubset
\sqsubseteq
\sqsupset
\sqsupseteq
\square
\star
\Subset
\subset
\subseteq
\subseteqq
\subsetneq
\subsetneqq
\succ
\succapprox
\succcurlyeq
\succeq
\succnapprox
\succnsim
\succsim
\sum
\Supset
\supset
\supseteq
\supseteqq
\supsetneq
\supsetneqq
\surd
\swarrow
\sup
\tan
\tanh
\tau
\therefore
\Theta
\theta
\thickapprox
\thicksim
\tilde
\time
\times
\top
\triangle
\triangledown
\triangleleft
\trianglelefteq
\triangleq
\triangleright
\trianglerighteq
\twoheadleftarrow
\twoheadrightarrow
\ulcorner
\underbrace
\underleftarrow
\underleftrightarrow
\underline
\underrightarrow
\unlhd
\unrhd
\Uparrow
\uparrow
\Updownarrow
\updownarrow
\upharpoonleft
\upharpoonright
\uplus
\Upsilon
\upsilon
\upuparrows
\urcorner
\varepsilon
\varkappa
\varnothing
\varphi
\varpi
\varpropto
\varrho
\varsigma
\varsubsetneq
\varsubsetneqq
\varsupsetneq
\varsupsetneqq
\vartheta
\vartriangle
\vartriangleleft
\vartriangleright
\Vdash
\vDash
\vdash
\vdots
\vec
\vee
\veebar
\Vvdash

2
lib/command/amsxtra.lst Executable file
View File

@@ -0,0 +1,2 @@
\accentedsymbol{}
\actualchar

1
lib/command/array.lst Executable file
View File

@@ -0,0 +1 @@
\firsthline

0
lib/command/babel.lst Executable file
View File

17
lib/command/bar.lst Executable file
View File

@@ -0,0 +1,17 @@
\bar{}{}[]
\hlineon
\legend{}{}
\sethspace{}
\setlinestyle{}
\setdepth{}
\setnumberpos{}
\setprecision{}
\setstretch{}
\setstyle{}
\setwidth{}
\setxaxis{}{}{}
\setxname{}
\setxvaluetyp{}
\setyaxis[]{}{}{}
\setyname{}

2
lib/command/bezier.lst Executable file
View File

@@ -0,0 +1,2 @@
\bezier{}(,)(,)(,)
\qbezier[](,)(,)(,)

13
lib/command/calc.lst Executable file
View File

@@ -0,0 +1,13 @@
\addtocounter{}{}
\advance
\Alph{}
\alph{}
\arabic{}
\divide
\equal
\fnsymbol{}
\multiply
\newcounter{}[]
\setcounter{}{}
\stepconnter{}
\the

9
lib/command/changebar.lst Executable file
View File

@@ -0,0 +1,9 @@
\cbdelete[]
\cbend
\cbstart
changebargrey
\changebarsep
\changebarwidth
\deletebarwidth
\nochangebars
\outerbarstrue

3
lib/command/chicago.lst Executable file
View File

@@ -0,0 +1,3 @@
\citeA{}
\citeN{}
\citeyear{}

6
lib/command/cite.lst Executable file
View File

@@ -0,0 +1,6 @@
\@cite
\cite{}
\citen
\shortcite
\shortciteA
\shortciteN

0
lib/command/color.lst Executable file
View File

6
lib/command/curves.lst Executable file
View File

@@ -0,0 +1,6 @@
\closecurve
\curve[]()
\curvedashes{}
\curvesymbol{}
\tagcurve[]()
\scaleput(){}

50
lib/command/doc.lst Executable file
View File

@@ -0,0 +1,50 @@
\*
\@idxitem
\AltMacroFont
\bslash
\changes{}{}{}
\CharacterTable{}
\CheckModules
\CheckSum{}
\CodelineIndex
\CodelineNumbered
\DeleteShortVerb
\DescribeEnv{}
\DescribeMacro{}
\DisableCrossrefs
\docdate
\DocInput{}
\DocstyleParms
\DoNotIndex
\DontCheckModules{}
\lndexlnput{}
\IndexMin
\IndexParms
\indexPrologue{}
\levelchar
\MacrocodeTopsep
\MacroFont
\MacroIndent
\MacroTopsep
\main
\MakePrivateLetters
\MakeShortVerb{}
\meta{}
\Module
\PrintChanges
\PrintDescribeEnv
\PrintDescribeMacro
\PrintIndex
\PrintMacroName
\ps@titlepage
\quotechar
\RecordChanges
\SortIndex
\SpecialEnvIndex
\SpecialEscapechar
\SpecialIndex
\SpecialMainIndex
\SpecialUsageIndex
\StopEventually
\theCodelineNo
\verbatimchar

3
lib/command/eclbip.lst Executable file
View File

@@ -0,0 +1,3 @@
\brush{}
\leftnode[]{}
\match

5
lib/command/ecltree.lts Executable file
View File

@@ -0,0 +1,5 @@
\chunk[]{}
\GapDepth
\GapWidth
\drawwith{}
\EdgeLabelSep

13
lib/command/eepic.lst Executable file
View File

@@ -0,0 +1,13 @@
\arc{}{}{}
\circle{}
\circle*{}
\ellipse{}{}
\ellipse*{}{}
\filltype{}
\line(){}
\maxovaldiam
\oval(){}
\path()
\spline()
\Thicklines
\thicklines

2
lib/command/endfloat.lst Executable file
View File

@@ -0,0 +1,2 @@
\figureplace
\nomarkersintext

2
lib/command/endnotes.lst Executable file
View File

@@ -0,0 +1,2 @@
\endnote
\enotesize

16
lib/command/epic.lst Executable file
View File

@@ -0,0 +1,16 @@
\shortstack
\allinethickness{}
\dashline[]{}[]()
\dashlinestretch
\dottedline[]{}()
\drawline[]()
\drawlinestretch
\grid(,)(,)[,]
\jput(){}
\matrixput()(){}(){}{}
\multyput
\multiputlist
\picsquare
\rightnode[]{}
\match{}{}
\leftnode{}{}

4
lib/command/epsfig.lst Executable file
View File

@@ -0,0 +1,4 @@
\epsfig{}
\psfigdriver{}
\psdraft
\psfull

1
lib/command/eufrac.lst Executable file
View File

@@ -0,0 +1 @@
\EuFrak

1
lib/command/euscript.lst Executable file
View File

@@ -0,0 +1 @@
\EuScript

6
lib/command/fancybox.lst Executable file
View File

@@ -0,0 +1,6 @@
\cornersize{}
\cornersize*{}
\doublebox{}
\shadowbox{}
\ovalbox{}
\Ovalbox{}

13
lib/command/fancyheadings.lst Executable file
View File

@@ -0,0 +1,13 @@
\cfoot[]{}
\chead[]{}
\fancyplain{}{}
\footrule
\footrulewidth
\headrule
\headrulewidth
\headwidth
\lfoot
\lhead
\rfoot
\rhead

6
lib/command/float.lst Executable file
View File

@@ -0,0 +1,6 @@
\floatname
\floatplacement
\floatstyle
\listof
\newfloat{}{}{}{}
\restylefloat{}

1
lib/command/floatfig.lst Executable file
View File

@@ -0,0 +1 @@
\initfloatingfigs

0
lib/command/fontenc.lst Executable file
View File

0
lib/command/graphicx.lst Executable file
View File

0
lib/command/grapics.lst Executable file
View File

1
lib/command/hangcaption.lst Executable file
View File

@@ -0,0 +1 @@
\isucaption

2
lib/command/hhline.lst Executable file
View File

@@ -0,0 +1,2 @@
\hhline
\hrule

17
lib/command/ifthen.lst Executable file
View File

@@ -0,0 +1,17 @@
\whiledo
\Yarea
\Ysize
\Xsize
\Xarea
\boolean{}
\ifthenelse
\equal{}{}
\isodd
\lengthtest{}
\newboolean
\newif
\newX
\newY
\not
\or
\setboolean

4
lib/command/index.lst Executable file
View File

@@ -0,0 +1,4 @@
\index{}{}
\indexproofstyle
\newindex{}{}{}{}
\renewindex{}{}{}{}

0
lib/command/inputenc.lst Executable file
View File

5
lib/command/latexsym.lst Executable file
View File

@@ -0,0 +1,5 @@
\leadsto
\Box
\Join
\lhd
\Diamond

1
lib/command/layout.lst Executable file
View File

@@ -0,0 +1 @@
\layout

5
lib/command/longtable.lst Executable file
View File

@@ -0,0 +1,5 @@
\endfirsthead
\endfoot
\endhead
\endlastfoot
\kill

942
lib/command/main_cmd.lst Executable file
View File

@@ -0,0 +1,942 @@
\'
\(
\)
\,
\-
\/
\:
\;
\=
\>
\!
\@addtoreset{}{}
\@cite
\@dotsep
\@dottedtocline{}{}{}{}{}
\@evenfoot
\@evenhead
\@makecaption{}{}
\@makefigcaption
\@makefnmark
\@makefntext
\@mkboth
\@oddfoot
\@oddhead
\@pnumwidth
\@ptsize
\@rightskip
\@seccntformat
\@startsection{}{}{}{}{}{}
\@starttoc{}
\@thefnmark
\@tocrmarg
\`
\a'
\a=
\a'
\abovedisplayshortskip
\abovedisplayskip
abstract
\abstractname
\accent
\acro
\addcontentsline{}{}
\adddialect{}{}
\addlanguage{}
\addto
\addtocontents{}{}
\addtocounter{}{}
\addtolength{}{}
\AE
\aleph
\alsoname
\amalg
\Appendix
\appendix
\appendixname
array
\AtBeginDocument
\AtEndDocument
\AtEndOfClass
\AtEndOfPackage
\baselineskip
\baselinestretch
\batchfile{}
\batchinput
\Bbb
\begin{}
\belowdisplayshortskip
\belowdisplayskip
\bf
\bfdefault
Bflushleft
Bflushright
\bfseries
\bibhang
\bibindent
\bibitem[]{}
\bibliography{}
\bibliographystyle{}
\bibliographyunit[]
\bibname
\bibpunct
\bigcircle
\bigskip
\bigskipamount
bmatrix
\bmod
\boldmath
book
bookman
\botfigrule
\bottomcaption
\bottomfraction
bottomnumber
\boxed{}
bundle
\bye
calc
\caption[]{}
\caption*{}
\captionwidth
cases
catalan
\catcode
cc
\ccname
CD
center
\centering
centertags
changebar
\chapter{}
chapter
\chapter*{}
chapterbib
\chaptermark
\chaptername
chicago
Citation
\cite[]{}
citesort
\cleardoublepage
\clearemptydoublepage
\clearpage
\cline
\CodelineFont
collectmore
color
colordvi
columnbadness
\columnsep
\colunnseprule
\coluanwidth
comment
concrete
\contentsline{}{}{}
\contentsname
Cor
croatian
cropmarks
\csname
\CurrentOption
curves
czech
danish
dashjoin
\dblfigrule
\dblfloatpagefraction
\dblfloatsep
\dbltextfloatsep
\dbltopfraction
dbltopnumber
dcolumn
debugshow
\DeclareErrorFont
\DeclareFixedFont{}{}{}{}{}{}
\DeclareFontEncoding{}{}{}
\DeclareFontFamily{}{}{}
\DeclareFontShape{}{}{}{}{}{}
\DeclareFontSubstitution{}{}{}{}
\DeclareMathAlphabet{}{}{}{}{}
\DeclareMathOperator{}
\DeclareMathOperator*{}
\DeclareMathSizes{}{}{}{}
\DeclareMathSymbol{}{}{}{}
\DeclareMathVersion{}
\DeclareOption{}{}
\DeclareOption*{}
\DeclareSymbolFont{}{}{}{}{}
\DeclareSymbolFontAlphabet{}{}
Def
\defaulthyphenchar
deflist
delarray
\depth
description
\descriptionlabel
\displaybreak[]
\displaystyle
doc
document
\documentclass[]{}
\documentstyle[]{}
\dotfill
dottedjoin
\doublerulesep
doublespace
\dq
draft
draftcopy
drawjoin
\driver
dutch
dvips
dvitops
\ecaption
eclbip
ecltree
eepic
eepicemu
\em
\emergencystretch
\emph{}
empty
emtex
\enclname
\encodingdefault
\end{}
\endcsname
endfloat
\endpostamble
\endpreamble
english
\enlargethispage{}
\enlargethispage*
\enspace
\ensuremath{}
entry
\entrylabel
enumerate
enumerate
enumeration
enumi
enumii
enumiii
enumiv
environment
epic
epsfig
eqnarray
eqnarray*
\eqref
equation
equation
equation*
errorshow
esperanto
eucal
eufrak
euler
euscript
\evensidemargin
Exa
\ExecuteOptions
executivepaper
exscale
\externaldocument
\extracolsep
\extrarowheight
\extratabsurround
\faketableofcontents
\familydefault
fancy
fancybox
fancyheadings
\fbox{}
\fboxrule
\fboxsep
figure
figure
\figurename
figwindow
filecontents
\fill
finalcolumnbadness
final
\Finale
finnish
fixed
flatter
flalign
flalign*
fleqn
float
floatfig
floatingfigure
\floatpagefraction
\floatsep
\flq
\flqq
\flushbottom
\flushcolunms
flushleft
flushright
\fminilength
fminipage
fnpara
\fontdimen
\fontencoding{}
\fontfamily{}
\fontseries{}
\fontshape{}
\fontsize{}{}
\footnote{}
footnote
\footnotemark
\footnoterule
\footnotesep
\footnotesize
\footnotetext{}
footnpag
\footskip
\framebox[][]{}
FrameVerb
francais
french
french
\from{}{}
\frq
\frqq
ftnright
\fullref
\fussy
galician
garamond
gather
gather*
gathered
\generateFile{}{}{}
german
german
germanb
\glossary
\glossaryentry
\glq
\glqq
graphics
\grq
\grqq
hackalloc
hangcaption
harvard
\hdotsfor[]{}
\headheight
headings
\headsep
\headtoname
\height
\help
helvet
here
hhline
\hline
\hoffset
\hrulefill
\hspace
\hspace*
\Huge
\huge
\IfFileExists{}{}{}
\iflanguage{}{}{}
ifthen
\ignorespaces
\include{}
\includeonly{}
indentfirst
index
\indexentry
\indexname
infoshow
\init
\input
inputenc
\InputIfFileExists{}{}{}
\intertext{}
\intextsep
intlimits
isolatin1
\it
italian
\itdefault
\item
\itemindent
itemize
\itemsep
\itshape
jmb
\jot
\keepsilent
\l@chapter
\l@example
\l@figure
\l@paragraph
\l@part
\l@section
\1@subparagraph
\l@subsection
\l@subsubsection
\l@table
\label{}
\labelenumi
\labelenumii
\labelenumiii
\labelemuniv
\labelitemi
\labelitemii
\labelitemiii
\labelitemiv
\labelsep
\labelwidth
\landscape
landscape
\LARGE
\Large
\large
\lasthline
latexsym,
layout
\left
\leftmargin
\leftmark
legalpaper
Lem
Lentry
\Lentrylabel{}
leqno
letter
letterpaper
\letterspace
letterspace
\linebreak
\linethickness
\linewidth
list
\listfigurename
\listfiles
\listofexamples
\listoffigures
\listoftables
\listparindent
\listtablename
ln
\LoadClass[]{}[]
loading
\longpage
longtable
\lowercase
lrbox
lscape
\LTcapwidth
\LTchunksize
\LTleft
\LTpost
\LTpre
\LTright
lucid
lucidbrb
lucidbry
lucmath
\lVert
\lvert
\m@th
macro
macrocode
macrocode*
magyar
\makeatletter
\makeatother
\makebox[][]{}
\makeglossary
makeidx
\makelabel
\maketitle
\marginlabel{}
\marginpar[]{}
\marginparpush
\marginparsep
\marginparwidth
\markboth{}{}
\markright{}
\mathalpha
\mathbf
\mathbin
\mathcal
\mathclose
\mathindent
\mathit
\mathnormal
\mathop
\mathopen
\mathord
\mathpunct
\mathrel
\mathrm
\mathsf
\mathsfsl
\mathsurround
\mathtt
\mathversion
\matrix
matrix
MaxMatrixCols
\mbox{}
\mddefault
\mdseries
\medskip
\medskipamount
\medspace
\Mentry
\Mentrylabel
\message
minipage
minitoc
minitocdepth
minitocoff
mm
moreverb
mpfootnote
\Msg
\mspace
\mtcfont
\mtcindent
mtimes
mu
multibox
multicol
multicols
\multicolsep
\multicolumn
multind
multirow
multline
multline*
\multlinegap
myheadings
named
namelimits
\names
nar
natbib
\naturalwidth
nature
\NeedsTeXFormat{}[]
\negmedspace
\negthickspace
\negthinspace
newapa
\newblock
newcent
\newcolunmtype{}[]{}
\newcommand{}
\newenvironment{}[]{}{}
\newfont
\newindex
\newlength
newlfont
\newpage
\newsavebox{}
\nfssfont
\nocite{}
\nocorr
\nocorrlist
\nofiglist
\nofiles
\nohyphens
\noindent
nointlimits
nonamelimits
\nonfrenchspacing
\nonumber
\nopagebreak
\normalem
\normalfont
\normalmarginpar
\normalsize
norsk
nosumlimits
\notablist
\notag
Notes
notes
\numberline
nynorsk
\oddsidemargin
oldgerm
oldlfont
\oldstylenums
\onecolumn
openbib
\openin
\OptionNotUsed
order
\Ovalbox{}
\ovalbox{}
overcite
oztex
\p@enumi
\p@enumii
\p@enumiii
\p@enumiv
page
\pagebreak
\pagename
\pagenumbering
\pageref
\pagestyle
palatino
pandora
\paperheight
\paperwidth
\paragraph{}
paragraph
\parbox[]{}{}
parentequation
\parindent
\parsep
\parskip
\part{}
part
\part*{}
\partname
\partopsep
\PassOptionsToClass{}{}
\PassOptionsToPackage{}{}
pausing
pc
\phantom
Piautolist
picinpar
picture
pifont
Pilist
plain
\plainfootrulewidth
\plainheadrulewidth
pmatrix
polish
portland
\portrait
portrait
portuges
\postamble
\postinulticols
\preamble
\prefacename
\premulticols
\PreserveBackslash
\ProcessOptions
\ProcessOptions*
program
program
programbox
proof
\proofmodetrue
\protect
\providecommand
\ProvidesClass
\ProvidesFile
\ProvidesPackage
\ps@
\ps@plain
psamsfonts
psboxit
pstimesm
pt
\put
\putbib
\putfile
\qquad
\quad
quotation
Quote
quote
\raggedcolumns
\raggedleft
\raggedright
\raisebox{}[][]{}
\ratio
\ref{}
\refname{}
\refstepcounter
\reftextafter
\reftextbefore
\reftextcurrent
\reftextfaceafter
\reftextfacebefore
\reftextfaraway
\reftextvario{}{}
Rem
\renewconnnand{}
\renewenvironment{}[]{}{}
report
reqno
\RequirePackage
resume
\reversemarginpar
\right
\rightmargin
\rightmark
\rightskip
\rm
\rmdefault
\rmfamily
\Roman
\roman
Roman
roman
romanian
rotate
rotate
rotating
\rotcaption
\rotdriver
\rule
russian
\samepage
\sAppendix
\savebox{}[][]{}
Sbox
\sbox{}
\sc
\scdefault
\scriptscriptstyle
\scriptsize
\scriptstyle
\scshape
\secdef
secnumdepth
\section{}
section
\section*{}
\sectionmark
\see
\seename
\selectfont
\selectlanguage
seminar
\seriesdefault
\setlength
\setmargins
\setmarginsrb
\SetMathAlphabet
\setpapersize
\SetSymbolFont
\settodepth
\settoheight{}{}
\settowidth{}{}
\sf
\sfdefault
\sffamily
\shabox
shadow
\shadowsize
\shapedefault
\shapepar
shapepar
\shortindexingoff
\shortindexingon
\shortpage
\shoveleft
\shoveright
\showcols
showidx
\showprogress
showtags
sideways
sidewaysfigure
sidewaystable
\skip
\sl
\sldefault
slides,
\sloppy
slovak
slovene
\slshape
\small
smallmatrix
\smallskip
\smallskipamount
\SortNoop
\sout
sp
\space
spacing
spanish
split
\squarepar
\ss
StandardModuleDepth
\stop
\stretch{}
\string
\strut
subarray
subequations
subfigure
\subitem
\subparagraph{}
subparagraph
\subsection{}
subsection
\substack
\subsubitem
\subsubsection{}
subsubsection
sumlimits
\suntaxonly
supertab
supertabular
supertabular*
\suppressfloats
\swabfamily
swedish
\symbol
syntonly
t1enc
tabbing
\tabbingsep
\tabcolsep
\table
table
\tablename
\tableofcontents
\tableplace
tabular
tabular*
TabularC
tabularx
tabularx
\tabularxcolunm
tabwindow
tbtags
\text{}
\textbf{}
\textfloatsep{}
\textfraction{}
\textfrak{}
\textgoth{}
\textheight{}
\textit{}
\textmd{}
\textnormal{}
\textrm{}
\textsc{}
\textsf{}
\textsl{}
\textstyle{}
\textswab{}
\texttt{}
\textup{}
textures
\textwidth
thebibliography
\thechapter
\theendnotes
\heenumi
\theenumii
\theenumiii
\theenumiv
\theequation
\thefootnote
theglossary
theindex
\thempfootnote
theorem
\thepage
\TheSbox
\thesection
\thesubfigure
\thesubsection
\thickspace
\thinlines
\thinspace
\thispagestyle
threeparttable
threeparttable
times
\tiny
tocdepth
\today
\tolerance
\topcaption
\topfigrule
\topfraction
\topmargin
topnumber
\topsep
\topskip
\totalheight
totalnumber
tracefnt
\tracingfonts
tracingmulticols
\tracingtabularx
trees
\tt
\ttdefault
\ttfamily
turkish
turn
\twlrm
\twocolumn
twocolumn
twoside
\typeout
ulem
\ULforem
\uline
unbalance
\unboldmath
\underset
\unitlength
\unskip
\updefault
upref
\upshape
\usage
\usebox{}
\usecounter
\usefont
\usepackage[]{}[]
\uwave
\vadjust
\value
varioref
\vector
Ventry
\verb
\verb*
\vfill
\vline
vmargin
\voffset
\vpageref
\vref
\vrule
\vspace
\vspace*
warningshow
\WideMargins
\width
window
\wlog
wrapfig
wrapfig
wrapfigure
\xleftarrow
\xout
xr
\xspace
xspace

2
lib/command/minitoc.lst Executable file
View File

@@ -0,0 +1,2 @@
\dominitoc
\minitoc

2
lib/command/multibox.lst Executable file
View File

@@ -0,0 +1,2 @@
\multiframe()(){}()[]{}
\multimake()(){}()[]{}

0
lib/command/multicol.lst Executable file
View File

3
lib/command/multind.lst Executable file
View File

@@ -0,0 +1,3 @@
\index{}
\makeindex{}{}
\printindex{}{}

2
lib/command/multirow.lst Executable file
View File

@@ -0,0 +1,2 @@
\multirow{}[]{}[]{}
\multirowsetup

2
lib/command/oldgerm.lst Executable file
View File

@@ -0,0 +1,2 @@
\frakfamily
\gothfamily

9
lib/command/pifont.lst Executable file
View File

@@ -0,0 +1,9 @@
\ding{}
dingautolist
\dingfill
\dingline
dinglist
\Pifill{}{}
\Pifont{}
\Piline{}{}
\Pisymbol{}{}

3
lib/command/psboxit.lst Executable file
View File

@@ -0,0 +1,3 @@
\psboxit{}{}
\PScommands
\spbox

3
lib/command/shadow.lst Executable file
View File

@@ -0,0 +1,3 @@
\sboxrule
\sboxsep
\sdim

2
lib/command/shapepar.lst Executable file
View File

@@ -0,0 +1,2 @@
\diamondpar
\heartpar

3
lib/command/subfigure.lst Executable file
View File

@@ -0,0 +1,3 @@
\subfigcapskip
\subfigtopskip
\subfigure

5
lib/command/supertab.lst Executable file
View File

@@ -0,0 +1,5 @@
\tablecaption{}
\tablefirsthead{}
\tablehead{}
\tablelasttail{}
\tabletail{}

1
lib/command/tabularx.lst Executable file
View File

@@ -0,0 +1 @@
\arraybackslash

6
lib/command/theorem.lst Executable file
View File

@@ -0,0 +1,6 @@
\newtheorem{}{}
\theorembodyfont{}
\theoremheaderfont{}
\theorempostskipamount{}
\theorempreskipamount{}
\theoremstyle{}

5
lib/command/trees.lst Executable file
View File

@@ -0,0 +1,5 @@
\branch{}{}{}:,.
\branchlabels{}{}{}
\leaf{}{}{}
\root() .
\tbranch{}{}{}:,.

11
lib/command/verbatim.lst Executable file
View File

@@ -0,0 +1,11 @@
listing
listing*
listingcont
listingcont*
\listinginput[]{}{}
\verbatimtabinput[]{}
verbatim
verbatim*
verbatimcmd
verbatimtab
verbatimwrite

3
lib/command/version.lst Executable file
View File

@@ -0,0 +1,3 @@
\excludeversion
\includeversion{}
version

1
lib/command/xspace.lst Executable file
View File

@@ -0,0 +1 @@
\@

11
lib/conf/encode.lst Executable file
View File

@@ -0,0 +1,11 @@
######################################################
# Tk LaTeX Editor
# Distributed under GNU Public License
# Author: Sergey Kalinin (aka BanZaj) banzaj@lrn.ru
# Copyright (c) "CONERO lab", 2004, http://conero.lrn.ru
######################################################
#
# Encode listing format: latex encode - tcl encode
#
######################################################
latin1 iso8859-1

22
lib/conf/package.lst Executable file
View File

@@ -0,0 +1,22 @@
######################################################
# Tk LaTeX Editor
# Distributed under GNU Public License
# Author: Sergey Kalinin (BanZaj) banzaj@lrn.ru
# Copyright (c) "CONERO lab", 2002, http://conero.lrn.ru
######################################################
#
# LaTeX pacckage list
#
######################################################
babel
color
grapics
graphicx
fontenc
inputenc
latexsym
longtable
multicol

161
lib/conf/tle.conf Executable file
View File

@@ -0,0 +1,161 @@
######################################################
# Tk LaTeX Editor
# Distributed under GNU Public License
# Author: Sergey Kalinin (BanZaj) banzaj@lrn.ru
# Copyright (c) "CONERO lab", 2002, http://conero.lrn.ru
######################################################
######################################################
# MAIN SETTINGS
######################################################
## LOCALE SETTING ##
set locale "en"
## BACKUP FILES ##
set backup(create) "Yes"
set backup(del) "No"
set backup(autosave) "No"
## HELP SYSTEM ##
set help(encode) "koi8-r"
## ISPELL SETTINGS ##
set ispell_lib /usr/lib/ispell
set ispell_startindex "1.0"
## DIRECTORY SETTING ##
set dir(tmp) [file join $env(HOME) tmp]
set dir(doc) [file join $env(HOME) doc my]
## TIMERS ##
## structure refresh time ##
## default 1 min ##
set timers(refresh) 60000
## autosave opened files time ##
## default 5 min ##
set timers(autosave) 300000
######################################################
# USER INTERFACE SETTINGS
######################################################
## MAIN WINDOW GEOMETRY ##
set gui(geometry) "750x550+0+0"
## NoteBook Tabs Specifies the side where to place the label of the pages. ##
## must be "top" or "bottom"
set gui(tabsLabel) "top"
## IMAGE THEME ##
## must be "default" "stroke" ##
set theme "stroke"
## SETING FONTS ##
set font(normal) "Arial 10 normal roman"
set font(bold) "Arial 10 bold roman"
## SETING COLOR ##
set color(selectbg) "#55c4d1"
set color(bg) "#bbbbbb"
set color(editBg) "#cccccc"
set color(editFg) "#000000"
set color(editTitleNormal) "#000000"
set color(editTitleModify) "#0021ff"
set color(lineNumberBg) "#bbbbbb"
set color(lineNumberFg) "#000000"
## HighLightning Color ##
set color(procName) "#0021ff"
set color(operator) "#0000a8"
set color(keyWord) "#0000a8"
set color(param) "#6a0082"
set color(subParam) "#008282"
set color(comments) "#9b9b9b"
set color(var) "#e50000"
set color(string) "#168400"
set color(brace) "#d33434"
set color(braceBG) "#000000"
set color(braceFG) "#00feff"
set color(percent) "#a500c6"
set color(bindKey) "#a500c6"
## RELIEF TOOL BUTTONS##
## must be flat, groove, raised, ridge, solid, sunken or link ##
set relief(btn) link
## RELIEF TOOL MENUS##
## must be flat, groove, raised, ridge, solid, or sunken ##
set relief(menu) groove
## SHOW TOOLBARS ##
## must be: tool(toolbar_file_name) flag
## where flag = 0 - hide, 1- show
set tool(main) 1
set tool(insert) 0
set tool(math) 0
set tool(format) 0
######################################################
# EDITOR SETTINGS
######################################################
## EDITOR FONTS ##
set font(editNormal) "fixed"
set font(editBold) "fixed"
## EXTERNAL EDITOR ##
set editor(extern) "No"
set editor(prog) "/usr/bin/emacs"
## AUTOMATICALLY WORD WRAPPING ##
set editor(wrap) "word" ;# must be: none, word or char
# this auto wraping string if string lenght more then editor(strLen)
# must be "No" or "Yes"
set editor(strWrap) "Yes"
set editor(strLen) 100
######################################################
# CONVERT/PREVIEW/PRINT SETTINGS
######################################################
## CONVERT ##
## %fileName - current file name
## %dirName - currennt directory name
set convert_cmd(dvi) "latex"
set convert_cmd(ps) "dvips -Pwww -j0 -ta4 -o %dirName/%fileName.ps %dirName/%fileName.dvi"
set convert_cmd(pdf) "ps2pdf %dirName/%fileName.ps"
set convert_cmd(html) "latex2html -no_navigation -split 0"
set convert_cmd(img) "convert"
## PREVIEW ##
set preview_cmd(dvi) "xdvi"
set preview_cmd(ps) "gv"
set preview_cmd(pdf) "acroread"
set preview_cmd(html) "mozilla"
######################################################
# MATH AND TEXT RENDERING PARAMETERS
######################################################
# image resolution
set render(res) "100x100"
# image format
set render(format) "gif"
# background color
set render(bg) "white"
# foreground color
set render(fg) "black"
# on/off transparency
set render(trans) 0
# on/off antialliasing
set render(aa) 1
######################################################
#
######################################################
set thumb(show) "Yes"
set thumb(resolution) "100x100"
set thumb(format) "png" ;# must be jpg, gif, png

94
lib/conf/tmp/first_proj.tex~ Executable file
View File

@@ -0,0 +1,94 @@
%-----------------------------------------------------%
% %
% <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %
% (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) %
% %
%-----------------------------------------------------%
\documentclass[12pt]{article}
\usepackage[koi8-r]{inputenc}
\usepackage[english,russian]{babel}
\usepackage{a4wide}
\usepackage{graphicx}
\begin{document}
\section{<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>}
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
\subsection{<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>}
\begin{itemize}
\item <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
\item <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
\item <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
\item <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
\item N <20>ޣ<EFBFBD><DEA3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 20-<2D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
\item <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
\item <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
\item <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
\end{itemize}
\subsection{<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>}
\begin{itemize}
\item <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
\item <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
\end{itemize}
\subsection{<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>}
\begin{itemize}
\item <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD>, N <20>ޣ<EFBFBD><DEA3>)
\item <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
\item <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
\item <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><>.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
\end{itemize}
\section{<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>}
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> C++, <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WxWindow - <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Linux, Windows, ...)
<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MySQL <20><><EFBFBD><EFBFBD> Paradox (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
\section{<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>}
\subsection{Personal}
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
\textbf{\emph{add}} (\textbf{String} \textit{LastName}, \textbf{String}
\textit{FirstName}, \textbf{String} \textit{MiddleName}, \textbf{Int}
\textit{Schet}) - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
\textbf{\emph{edit}} (\textbf{Int} \textit{Id}, (\textbf{String} \textit{LastName},
\textbf{String} \textit{FirstName}, \textbf{String} \textit{MiddleName},
\textbf{Int} \textit{Schet}) - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
\textbf{\emph{del}} (\textbf{Int} \textit{Id}) - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
\subsection{Payment}
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
\textbf{\emph{add}} (\textbf{Int} \textit{IdPerson}, \textbf{Int}
\textit{Summa}, \textbf{String} \textit{Date}, \textbf{String}
\textit{PaymentName}) - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
\textbf{\emph{edit}} (\textbf{Int} \textit{Id}, \textbf{Int} \textit{IdPerson},
\textbf{Int} \textit{Summa}, \textbf{String} \textit{Date}, \textbf{String}
\textit{PaymentName}) - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
\textbf{\emph{del}} (\textbf{Int} \textit{Id}) - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
\end{document}

69
lib/gui/toolbar/format Executable file
View File

@@ -0,0 +1,69 @@
######################################################
# Tk LaTeX Editor
# Distributed under GNU Public License
# Author: Sergey Kalinin (BanZaj) banzaj@lrn.ru
# Copyright (c) "CONERO lab", 2002, http://conero.lrn.ru
######################################################
# Format ToolBar
menu insertsection.gif "Sections" {
cmd "AddTextFont title" "Title" "Alt-t"
cmd "AddTextFont author" "Author" "Alt-a"
cmd "AddTextFont date" "Date" "Alt-d"
cmd "AddTextCommand maketitle" "Make title"
cmd "AddTextDouble begin{tilepage} end{tilepage}" "Title page"
cmd "AddTextCommand tableofcontents" "Table of Contents"
cmd "AddTextCommand listoftables" "List of Tables"
cmd "AddTextCommand listoffigures "List of Figures"
cmd "AddTextDouble begin{thebibliography} end{thebibliography}" "The Bibliography"
cmd "AddTextCommand appendix "Appendix"
cmd separator
cmd "AddTextFont part" "Part"
cmd "AddTextFont chapter" "Chapter"
cmd "AddTextFont section" "Section"
cmd "AddTextFont subsection" "SubSection"
cmd "AddTextFont subsubsection" "SubSubSection"
cmd "AddTextFont paragraph" "Paragraph"
cmd "AddTextFont subparagraph" "SubParagraph"
}
menu font_size.gif "Font size" {
cmd "AddTextFont tiny" "tiny"
cmd "AddTextFont scriptsize" "scriptsize"
cmd "AddTextFont footnotesize" "footnotesize"
cmd "AddTextFont small" "small"
cmd "AddTextFont normalsize" "Normal"
cmd "AddTextFont large" "large"
cmd "AddTextFont Large" "Large"
cmd "AddTextFont LARGE" "LARGE"
cmd "AddTextFont huge" "huge"
cmd "AddTextFont Huge" "Huge"
}
menu font_width.gif "Font type" {
cmd "AddTextFont textrm" "Romanic"
cmd "AddTextFont textsf" "Sans Serif"
cmd "AddTextFont texttt" "Typewriter Typeset"
cmd separator
cmd "AddTextFont textmd" "Middle Face"
cmd "AddTextFont textbf" "Bold Face"
cmd separator
cmd "AddTextFont textup" "Up"
cmd "AddTextFont textit" "Italic"
cmd "AddTextFont textsl" "Slanted"
cmd "AddTextFont textsc" "Small Caps"
}
button "AddTextFont emph" font_emph.gif "Emphasise"
button "AddTextDouble begin{center} end{center}" align_center.gif "Align center"
button "AddTextDouble begin{left} end{left}" align_left.gif "Align left"
button "AddTextDouble begin{right} end{right}" align_right.gif "Align right"
button "AddTextDouble begin{verbatim} end{verbatim}" verb.gif "Verbatim"
Separator

17
lib/gui/toolbar/insert Executable file
View File

@@ -0,0 +1,17 @@
######################################################
# Tk LaTeX Editor
# Distributed under GNU Public License
# Author: Sergey Kalinin (BanZaj) banzaj@lrn.ru
# Copyright (c) "CONERO lab", 2002, http://conero.lrn.ru
######################################################
button "AddText itemize" itemize.gif "Add itemize list"
button "AddText enumerate" numerate.gif "Add enumerate list"
button "AddText image" image.gif "Insert image"
Separator
button "InsertTableDialog" table.gif "Add table"
button "AddText date" date_time.gif "Insert curent date-time" "Alt-d"

43
lib/gui/toolbar/main Executable file
View File

@@ -0,0 +1,43 @@
# Main Toolbar file
# useage :
# "Command" image.file "Hint for baloon"
button "FileDialog new" new.gif "New file"
button "FileDialog open" open.gif "Open file"
button "FileDialog close" close.gif "Close"
Separator
button "FileDialog save" save.gif "Save file"
button "FileDialog save_as" save_as.gif "Save file as"
button "FileDialog save_all" save_all.gif "Save all"
Separator
button "CutPast undo" undo.gif "Undo"
Separator
button "CutPast cut" cut.gif "Cut into clipboard"
button "CutPast copy" copy.gif "Copy into clipboard"
button "CutPast paste" paste.gif "Paste from clipboard"
Separator
button "Find" find.gif "Find"
button "SpellCheck $nb.f[$nb raise].f.text" spellcheck.gif "Spell check"
Separator
button "Convert dvi" dvi.gif "Make DVI"
button "Preview dvi" dvi_preview.gif "View DVI" "Alt-F5"
button "Convert ps" ps.gif "Make PS"
button "Preview ps" ps_preview.gif "View PS" "Alt-F6"
button "Convert pdf" pdf.gif "Convert to PDF"
button "Preview pdf" pdf_preview.gif "View PDF" "Alt-F7"
button "Convert html" htmlconvert.gif "Convert to HTML"
button "Preview html" html_preview.gif "View HTML"
Separator
button "PrintDialog print" print.gif "Print ..."

106
lib/gui/toolbar/math Executable file
View File

@@ -0,0 +1,106 @@
########################################################
# Tk LaTeX Editor
# Distributed under GNU Public License
# Author: Sergey Kalinin (BanZaj) banzaj@lrn.ru
# Copyright (c) "CONERO lab", 2002, http://conero.lrn.ru
########################################################
# Mathematical ToolBar
# Author: Constantin i Mikhailenko (Const)
########################################################
menu math/equation.gif "Math mode" {
cmd "AddTextDouble begin{math} end{math}" "math"
cmd "AddTextMath ( )" "( ... )"
cmd "AddTextMath $ $" "$ ... $"
cmd separator
cmd "AddTextDouble begin{displaymath}\n end{displaymath}" "displaymath"
cmd "AddTextMath \[ \]" "[ ... ]"
cmd "AddTextMath $$ $$" "$$ ... $$"
cmd separator
cmd "AddTextDouble begin{equation}\n end{equation}" "equation"
cmd "AddTextDouble begin{eqarray}\n end{eqarray}" "eqarray"
}
menu math/alpha-nu.gif "Greek 1" {
imagecmd "AddTextCommand alpha" "\alpha" math/alpha.gif
imagecmd "AddTextCommand beta" "\beta" math/beta.gif
imagecmd "AddTextCommand gamma" "\gamma" math/gamma.gif
imagecmd "AddTextCommand delta" "\delta" math/delta.gif
imagecmd "AddTextCommand zeta" "\zeta" math/zeta.gif
imagecmd "AddTextCommand epsilon" "\epsilon" math/epsilon.gif
imagecmd "AddTextCommand varepsilon" "\varepsilon" math/varepsilon.gif
imagecmd "AddTextCommand eta" "\eta" math/eta.gif
imagecmd "AddTextCommand theta" "\theta" math/theta.gif
imagecmd "AddTextCommand vartheta" "\vartheta" math/vartheta.gif
imagecmd "AddTextCommand iota" "\iota" math/iota.gif
imagecmd "AddTextCommand kappa" "\kappa" math/kappa.gif
imagecmd "AddTextCommand lambda" "\lambda" math/lambda.gif
imagecmd "AddTextCommand mu" "\mu" math/mu.gif
imagecmd "AddTextCommand nu" "\nu" math/nu.gif
}
menu math/xi-omega.gif "Greek 2" {
imagecmd "AddTextCommand xi" "\xi" math/xi.gif
imagecmd "AddTextCommand tau" "\tau" math/tau.gif
imagecmd "AddTextCommand upsilon" "\upsilon" math/upsilon.gif
imagecmd "AddTextCommand pi" "\pi" math/pi.gif
imagecmd "AddTextCommand varpi" "\varpi" math/varpi.gif
imagecmd "AddTextCommand rho" "\rho" math/rho.gif
imagecmd "AddTextCommand varrho" "\varrho" math/varrho.gif
imagecmd "AddTextCommand sigma" "\sigma" math/sigma.gif
imagecmd "AddTextCommand varsigma" "\varsigma" math/varsigma.gif
imagecmd "AddTextCommand o" "o" math/omikron.gif
imagecmd "AddTextCommand \phi" "\phi" math/phi.gif
imagecmd "AddTextCommand varphi" "\varphi" math/varphi.gif
imagecmd "AddTextCommand chi" "\chi" math/chi.gif
imagecmd "AddTextCommand psi" "\psi" math/psi.gif
imagecmd "AddTextCommand omega" "\omega" math/omega.gif
}
menu math/omega.gif "Greek" {
imagecmd "AddTextCommand Gamma" "\Gamma" math/gamma.gif
imagecmd "AddTextCommand Delta" "\Delta" math/delta.gif
imagecmd "AddTextCommand Theta" "\Theta" math/theta.gif
imagecmd "AddTextCommand Xi" "\Xi" math/xi.gif
imagecmd "AddTextCommand Upsilon" "\Upsilon" math/upsilon.gif
imagecmd "AddTextCommand Pi" "\Pi" math/pi.gif
imagecmd "AddTextCommand Sigma" "\sigma" math/sigma.gif
imagecmd "AddTextCommand Phi" "\Phi" math/phi.gif
imagecmd "AddTextCommand Psi" "\Psi" math/psi.gif
imagecmd "AddTextCommand Omega" "\omega" math/omega.gif
}
menu math/accent.gif "Accents" {
imagecmd "AddTextFont hat" "\hat{}" math/hat.gif
imagecmd "AddTextFont check" "\check{}" math/check.gif
imagecmd "AddTextFont breve" "\breve{}" math/breve.gif
imagecmd "AddTextFont acute" "\acute{}" math/acute.gif
imagecmd "AddTextFont grave" "\grave{}" math/grave.gif
imagecmd "AddTextFont tilde" "\tilde{}" math/tilde.gif
imagecmd "AddTextFont bar" "\bar{}" math/bar.gif
imagecmd "AddTextFont vec" "\vec{}" math/vec.gif
imagecmd "AddTextFont dot" "\dot{}" math/dot.gif
imagecmd "AddTextFont ddot" "\ddot{}" math/ddot.gif
cmd separator
imagecmd "AddTextFont widehat" "\widehat{}" math/widehat.gif
imagecmd "AddTextFont widetilde" "\widetilde{}" math/widetilde.gif
}
menu math/math_font.gif "Mathematical fonts" {
cmd "AddTextFont mathnormal" "Normal"
cmd separator
cmd "AddTextFont mathrm" "Romanic"
cmd "AddTextFont mathbf" "Boldface"
cmd "AddTextFont mathsf" "SansSerif"
cmd "AddTextFont mathtt" "TypeWriter Typeset"
cmd "AddTextFont mathit" "Italic"
cmd separator
cmd "AddTextFont mathcal" "Calligraphic"
cmd separator
cmd "AddTextFont boldmath" "BoldMath"
cmd "AddTextFont unboldmath" "UnboldMath"
}

53
lib/modules/about.tcl Executable file
View File

@@ -0,0 +1,53 @@
########################################################
# Tk LaTeX Editor
# Distributed under GNU Public License
# Author: Sergey Kalinin banzaj@lrn.ru
# Copyright (c) "CONERO lab", 2002, http://conero.lrn.ru
########################################################
## ABOUT DIALOG ##
proc AboutDialog {} {
global dir tree nb ver font release
set w .about
if {[winfo exists $w]} {
destroy $w
}
toplevel $w
wm title $w [::msgcat::mc "About ..."]
#wm resizable $w 0 0
wm transient $w .
frame $w.frmImg -borderwidth 2 -relief ridge -background black
image create photo imgAbout -format gif -file [file join $dir(img) tle.gif]
image create photo imgConero -format gif -file [file join $dir(img) conero.gif]
label $w.frmImg.lblImg -image imgAbout -background black
pack $w.frmImg.lblImg -side top -fill x
frame $w.frmlbl -borderwidth 2 -relief ridge -background "#8700d1"
label $w.frmlbl.lblVersion -text "[::msgcat::mc Version] $ver$release"\
-background "#8700d1" -foreground black
label $w.frmlbl.lblAuthorName -text "[::msgcat::mc Authors]:"\
-background "#8700d1" -foreground black
label $w.frmlbl.lblAuthor1 -text "Sergey Kalinin (aka BanZaj), banzaj@lrn.ru"\
-background "#8700d1" -foreground black
label $w.frmlbl.lblAuthor2 -text "Constantin I Makhailenko (aka Const), const@mail.ru"\
-background "#8700d1" -foreground black
pack $w.frmlbl.lblVersion $w.frmlbl.lblAuthorName $w.frmlbl.lblAuthor1 $w.frmlbl.lblAuthor2 -side top -padx 5
pack $w.frmImg -side top -fill x
pack $w.frmlbl -side top -expand true -fill both
bind $w <Escape> "destroy .about"
bind $w <Return> "destroy .about"
#
}

234
lib/modules/addtext.tcl Executable file
View File

@@ -0,0 +1,234 @@
######################################################
# TkTeXEditor
# Distributed under GNU Public License
# Author: Sergey Kalinin (BanZaj) banzaj@lrn.ru
# Copyright (c) "CONERO lab", 2002, http://conero.lrn.ru
######################################################
proc AddText {action} {
global dir font color nb
set node [$nb raise]
if {$node == "" || $node == "debug"} {return}
set text "$nb.f$node.f.text"
set pos [$text index insert]
set curLine [lindex [split $pos "."] 0]
set cursor [lindex [split $pos "."] 1]
set editLine [$text get $curLine.0 $pos]
set types {
{"EPS" {.eps}}
{"PDF" {.pdf}}
{"PNG" {.png}}
{"JPG" {.jpg}}
{"GIF" {.gif}}
}
set selIndex [$text tag ranges sel]
if {$selIndex != ""} {
set posBegin [lindex $selIndex 0]
set posEnd [lindex $selIndex 1]
set curLine [string range $posBegin 0 [expr [string first "\." $posBegin] - 1]]
set cursor [string range $posBegin [expr [string first "\." $posBegin] + 1] end]
set endLine [string range $posEnd 0 [expr [string first "\." $posEnd] - 1]]
set endCur [string range $posEnd [expr [string first "\." $posBegin] + 1] end]
set selText [$text get $posBegin $posEnd]
} else {
set posBegin "$curLine.$cursor"
set endLine [expr $curLine +1]
set endCur 0
}
switch -- $action {
enumerate {
#insert - 1 chars wordstart" "insert wordend - 1 chars"
$text insert $posBegin "\\begin\{enumerate\}\n"
$text insert [expr $curLine +1].0 "\\item \n"
$text insert [expr $curLine +2].0 "\\end\{enumerate\}"
set t [$text get $posBegin $curLine.end]
set curPos "[expr $curLine + 1]\.end"
}
image {
set file [tk_getOpenFile -initialdir $dir(doc) -filetypes $types -parent .\
-title "[::msgcat::mc "Select image"]"]
#set fileName [file tail $file]
if {$file == ""} {
return
}
$text insert $posBegin "\\includegraphics\[\]\{$file\}\n"
set t [$text get $posBegin $curLine.end]
set curPos "$curLine\.[string last "\\" $t]"
}
itemize {
$text insert $posBegin "\\begin\{itemize\}\n"
$text insert [expr $curLine +1].0 "\\item \n"
$text insert [expr $curLine +2].0 "\\end\{itemize\}"
set t [$text get $posBegin $curLine.end]
set curPos "[expr $curLine +1]\.end"
}
item {
set editLine [$text get [expr $curLine - 1].0 $pos]
if [regexp -nocase -all -- {(\\item)} $editLine match v1] {
$text insert $curLine.0 "\\item "
set curPos "$curLine\.6"
} else {
return
}
}
date {
set editLine [$text get [expr $curLine - 1].0 $pos]
set unixTime [exec date +%s]
set dateTime [clock format $unixTime -format "%d.%m.%Y, %H:%M:%S"]
$text insert $curLine.0 "$dateTime"
set curPos "$curLine\.end"
}
}
$text mark set insert $curPos
$text see insert
}
######################################################
proc AddTextFont {action} {
global dir font color nb
set node [$nb raise]
if {$node == "" || $node == "debug"} {return}
set text "$nb.f$node.f.text"
set pos [$text index insert]
set curLine [lindex [split $pos "."] 0]
set cursor [lindex [split $pos "."] 1]
set editLine [$text get $curLine.0 $pos]
set selIndex [$text tag ranges sel]
if {$selIndex != ""} {
set posBegin [lindex $selIndex 0]
set posEnd [lindex $selIndex 1]
set curLine [string range $posBegin 0 [expr [string first "\." $posBegin] - 1]]
set cursor [string range $posBegin [expr [string first "\." $posBegin] + 1] end]
set endLine [string range $posEnd 0 [expr [string first "\." $posEnd] - 1]]
set endCur [string range $posEnd [expr [string first "\." $posBegin] + 1] end]
set selText [$text get $posBegin $posEnd]
$text insert $endLine.$endCur "\}"
$text insert $posBegin "\\$action\{"
set t [$text get $posBegin $curLine.end]
set curPos "$endLine\.end"
$text mark set insert $curPos
} else {
set posBegin "$curLine.$cursor"
set endLine [expr $curLine +0]
$text insert $posBegin "\\$action\{\}"
$text mark set insert "$endLine.end - 1 chars"
}
$text see insert
}
proc AddTextCommand {action} {
global dir font color nb
set node [$nb raise]
if {$node == "" || $node == "debug"} {return}
set text "$nb.f$node.f.text"
set pos [$text index insert]
set curLine [lindex [split $pos "."] 0]
set cursor [lindex [split $pos "."] 1]
set editLine [$text get $curLine.0 $pos]
set selIndex [$text tag ranges sel]
if {$selIndex != ""} {
set posBegin [lindex $selIndex 0]
set posEnd [lindex $selIndex 1]
set curLine [string range $posBegin 0 [expr [string first "\." $posBegin] - 1]]
set cursor [string range $posBegin [expr [string first "\." $posBegin] + 1] end]
set endLine [string range $posEnd 0 [expr [string first "\." $posEnd] - 1]]
set endCur [string range $posEnd [expr [string first "\." $posBegin] + 1] end]
set selText [$text get $posBegin $posEnd]
$text insert $posBegin "\\$action "
set t [$text get $posBegin $curLine.end]
set curPos "$endLine\.end"
$text mark set insert $curPos
} else {
set posBegin "$curLine.$cursor"
set endLine [expr $curLine +0]
$text insert $posBegin "\\$action "
$text mark set insert "$endLine.end"
}
$text see insert
}
proc AddTextDouble {beginText endText} {
global dir font color nb
set node [$nb raise]
if {$node == "" || $node == "debug"} {return}
set text "$nb.f$node.f.text"
set pos [$text index insert]
set curLine [lindex [split $pos "."] 0]
set cursor [lindex [split $pos "."] 1]
set editLine [$text get $curLine.0 $pos]
set selIndex [$text tag ranges sel]
if {$selIndex != ""} {
set posBegin [lindex $selIndex 0]
set posEnd [lindex $selIndex 1]
set curLine [string range $posBegin 0 [expr [string first "\." $posBegin] - 1]]
set cursor [string range $posBegin [expr [string first "\." $posBegin] + 1] end]
set endLine [string range $posEnd 0 [expr [string first "\." $posEnd] - 1]]
set endCur [string range $posEnd [expr [string first "\." $posBegin] + 1] end]
set selText [$text get $posBegin $posEnd]
if {[string range $endText 0 1] == "\n"} {
$text insert $endLine.$endCur " \\$endText"
} else {
$text insert $endLine.$endCur "\n\\[string trim $endText "\n"]"
}
$text insert $posBegin "\\$beginText "
} else {
set posBegin "$curLine.$cursor"
if {[string range $endText 0 1] == "\n"} {
$text insert $posBegin "\\$beginText \\$endText"
} else {
$text insert $posBegin "\\$beginText \n\\[string trim $endText "\n"]"
puts "$beginText $endText"
}
}
set ind [expr [string length $beginText] + 2]
set curPos "$posBegin + $ind chars"
$text mark set insert $curPos
$text see insert
}
proc AddTextMath {beginText endText} {
global dir font color nb
set node [$nb raise]
if {$node == "" || $node == "debug"} {return}
set text "$nb.f$node.f.text"
set pos [$text index insert]
set curLine [lindex [split $pos "."] 0]
set cursor [lindex [split $pos "."] 1]
set editLine [$text get $curLine.0 $pos]
set selIndex [$text tag ranges sel]
if {$selIndex != ""} {
set posBegin [lindex $selIndex 0]
set posEnd [lindex $selIndex 1]
set curLine [string range $posBegin 0 [expr [string first "\." $posBegin] - 1]]
set cursor [string range $posBegin [expr [string first "\." $posBegin] + 1] end]
set endLine [string range $posEnd 0 [expr [string first "\." $posEnd] - 1]]
set endCur [string range $posEnd [expr [string first "\." $posBegin] + 1] end]
set selText [$text get $posBegin $posEnd]
if {[string range $endText 0 1] == "\n"} {
$text insert $endLine.$endCur " $endText"
} else {
$text insert $endLine.$endCur "[string trim $endText "\n"]"
}
$text insert $posBegin "$beginText "
} else {
set posBegin "$curLine.$cursor"
if {[string range $endText 0 1] == "\n"} {
$text insert $posBegin "$beginText \\$endText"
} else {
$text insert $posBegin "$beginText [string trim $endText "\n"]"
}
}
set ind [expr [string length $beginText] + 2]
set curPos "$posBegin + $ind chars"
$text mark set insert $curPos
$text see insert
}

84
lib/modules/baloon.tcl Executable file
View File

@@ -0,0 +1,84 @@
#######################################################################
# Baloon help
# Author: Alexander Dederer
# Usage:
# Set balloon tips to widget:
# balloon $widget set "Hello World"
# balloon [button .exit -text "exit" -command exit] set "Hello world"
#
# Clear ballon tips from widget:
# balloon $widget clear
#
# Show balloon tips on widget:
# balloon $widget show "Hello World"
#######################################################################
proc balloon { widget action args } {
global BALLOON font
switch -- $action {
set {
if { $args != {{}} } {
balloon $widget clear
#bind $widget <Any-Enter> "after 1000 [list balloon %W show $args mousepointer %X %Y]"
#bind $widget <Any-Leave> "catch { destroy %W.balloon }"
bind $widget <Enter> " balloon $widget show $args "
bind $widget <Leave> " wm withdraw .bubble "
}
}
show {
if ![winfo exists .bubble] {
toplevel .bubble -relief flat -background black -bd 1
wm withdraw .bubble
update
array set attrFont [font actual fixed]
set attrFont(-size) [expr $attrFont(-size) - 2]
eval pack [message .bubble.txt -aspect 5000 -bg lightyellow \
-font $font(normal) -text [lindex $args 0]]
pack .bubble.txt
wm transient .bubble .
wm overrideredirect .bubble 1
bind .bubble <Enter> "wm withdraw .bubble"
}
if {$args == ""} { wm withdraw .bubble }
set text [lindex $args 0]
set BALLOON $text
switch $text {
"" { wm withdraw .bubble ; update }
"default" {
after 1000 "raise_balloon $widget {$text}"
after 7000 "if { \$BALLOON == {$text} } { wm withdraw .bubble ; update }"
}
} ;# switch
}
clear {
catch { destroy .balloon }
bind $widget <Enter> {}
bind $widget <Leave> {}
}
} ;# switch action
} ;# proc balloon
proc raise_balloon {widget text} {
global BALLOON
if { $BALLOON != $text } { wm withdraw .bubble ; update ; return }
set cur_widget [winfo containing [winfo pointerx .] [winfo pointery .]]
if { $cur_widget != $widget } { return }
raise .bubble
.bubble.txt configure -text $text
set b_x [expr [winfo pointerx .] - [winfo reqwidth .bubble]/2]
set b_y [expr [winfo pointery .] + 15]
wm geometry .bubble +$b_x+$b_y
wm deiconify .bubble
update
} ;# proc raise_balloon

163
lib/modules/completition.tcl Executable file
View File

@@ -0,0 +1,163 @@
###########################################################
# Tcl/Tk Project Manager #
# Distrubuted under GPL #
# Copyright (c) "CONERO lab", 2002, http://conero.lrn.ru #
# Author: Sergey Kalinin (aka BanZaj) banzaj@lrn.ru #
###########################################################
# AutoCompletition Procedure #
# Author Alex DEDERER #
# Modify by Sergey (BanZaj) Kalinin 23.05.2002 #
###########################################################
proc auto_completition { widget } {
set start_word [$widget get "insert - 1 chars wordstart" insert]
set box [$widget bbox insert]
set box_x [expr [lindex $box 0] + [winfo rootx $widget] ]
set box_y [expr [lindex $box 1] + [winfo rooty $widget] + [lindex $box 3] ]
set cnt 0
set pos "1.0"
set last_pos ""
set pattern "$start_word\\w*"
set list_word($start_word) 1
while { ([set start [$widget search -count cnt -regexp -- $pattern $pos end]] != "") } {
set word [$widget get $start "$start + $cnt chars"]
if { ![string equal $start_word $word] } { set list_word($word) 1 }
set pos [$widget index "$pos + [expr $cnt + 1] chars"]
if { [string equal $last_pos $pos] } { break }
set last_pos $pos
} ;# while
bindtags $widget [list CompletitionBind [winfo toplevel $widget] $widget Text sysAfter all]
bind CompletitionBind <Escape> "bindtags $widget {[list [winfo toplevel $widget] $widget Text sysAfter all]}; catch { destroy .aCompletition }"
bind CompletitionBind <Key> { auto_completition_key %W %K %A ; break}
eval auto_completition_win $box_x $box_y [array names list_word]
} ;# proc auto_completition
## PROCEDURE LIST ##
## by BanZaj ##
proc AutoComplit {} {
global cmd activeFile nb
set node $activeFile
if {$node == ""} {return}
set widget "$nb.f$node.f.text"
set start_word [$widget get "insert - 1 chars wordstart" insert]
set box [$widget bbox insert]
set box_x [expr [lindex $box 0] + [winfo rootx $widget] ]
set box_y [expr [lindex $box 1] + [winfo rooty $widget] + [lindex $box 3] ]
set cnt 0
set pos "1.0"
set last_pos ""
set pattern "$start_word\\w*"
set i 0
for {set j 0} {$j <= [llength $cmd(all)]} {incr j} {
set line [lindex $cmd(all) $j]
if [regexp -nocase -all -- {(\\)([a-zA-Z]*)(\{\})} $line word] {
set word [string trim $word "\\"]
if {[string match "$start_word*" $word]} {
set list_word($word) $word
incr i
}
}
if {[string match "$start_word*" $line]} {
set list_word($line) $line
incr i
}
}
if {[array names list_word] == ""} {
return
}
bindtags $widget [list CompletitionBind [winfo toplevel $widget] $widget Text sysAfter all]
bind CompletitionBind <Escape> "bindtags $widget {[list [winfo toplevel $widget] $widget Text sysAfter all]}; catch { destroy .aCompletition }"
bind CompletitionBind <Key> {auto_completition_key %W %K %A ; break}
eval auto_completition_win $box_x $box_y [array names list_word]
} ;# proc auto_completition_proc
proc auto_completition_win { x y args} {
set win .aCompletition
if { [winfo exists $win] } { destroy $win }
toplevel $win
wm transient $win .
wm overrideredirect $win 1
listbox $win.lBox -width 30 -border 2 -yscrollcommand "$win.yscroll set" -border 1
scrollbar $win.yscroll -orient vertical -command "$win.lBox yview" -width 13 -border 1
pack $win.lBox -expand true -fill y -side left
pack $win.yscroll -side left -expand false -fill y
foreach { word } $args {
$win.lBox insert end $word
} ;# foreach | insert all word
catch { $win.lBox activate 0 ; $win.lBox selection set 0 0 }
if { [set height [llength $args]] > 10 } { set height 10 }
$win.lBox configure -height $height
bind $win <Escape> " destroy $win "
bind $win.lBox <Escape> " destroy $win "
wm geom $win +$x+$y
} ;# auto_completition_win
proc auto_completition_key { widget K A } {
set win .aCompletition
set ind [$win.lBox curselection]
switch -- $K {
Prior {
set up [expr [$win.lBox index active] - [$win.lBox cget -height]]
if { $up < 0 } { set up 0 }
$win.lBox activate $up
$win.lBox selection clear 0 end
$win.lBox selection set $up $up
}
Next {
set down [expr [$win.lBox index active] + [$win.lBox cget -height]]
if { $down >= [$win.lBox index end] } { set down end }
$win.lBox activate $down
$win.lBox selection clear 0 end
$win.lBox selection set $down $down
}
Up {
set up [expr [$win.lBox index active] - 1]
if { $up < 0 } { set up 0 }
$win.lBox activate $up
$win.lBox selection clear 0 end
$win.lBox selection set $up $up
}
Down {
set down [expr [$win.lBox index active] + 1]
if { $down >= [$win.lBox index end] } { set down end }
$win.lBox activate $down
$win.lBox selection clear 0 end
$win.lBox selection set $down $down
}
Return {
$widget delete "insert - 1 chars wordstart" "insert wordend - 1 chars"
$widget insert "insert" [$win.lBox get [$win.lBox curselection]]
#$widget mark set insert "insert wordend - 1 chars"
#$widget see insert
eval [bind CompletitionBind <Escape>]
}
default {
$widget insert "insert" $A
eval [bind CompletitionBind <Escape>]
}
}
} ;# proc auto_completition_key

252
lib/modules/convert.tcl Executable file
View File

@@ -0,0 +1,252 @@
######################################################
# Tk LaTeX Editor
# Distributed under GNU Public License
# Author: Sergey Kalinin (BanZaj) banzaj@lrn.ru
# Copyright (c) "CONERO lab", 2002, http://conero.lrn.ru
######################################################
proc Latex2Html {} {
global tree module cmdString
set selFiles [$tree selection get]
if {[llength $selFiles] == 0} {
set answer [tk_messageBox\
-message "[::msgcat::mc "Don't selected file"]"\
-type ok -icon warning\
-title [::msgcat::mc "Warning"]]
case $answer {
ok {return 0}
}
}
if {[llength $selFiles] == 1} {
if {$selFiles != ""} {
set file [$tree itemcget $selFiles -data]
}
CommandStringDialog $file
}
#puts $command
}
proc ConvertDialog {action} {
global nb files font color cmdString module tcl_platform module convert_cmd activeFile act
set act $action
if [info exists activeFile] {
set nod $activeFile
} else {
return
}
if {[info exists files($nod)] == 0} {
return
}
set file [lindex $files($nod) 0]
set w .cmd
# destroy the find window if it already exists
if {[winfo exists $w]} {
destroy $w
}
toplevel $w
wm title $w [::msgcat::mc "Command options"]
wm resizable $w 0 0
wm transient $w .
frame $w.frmCombo -borderwidth 1 -background $color(bg)
frame $w.frmBtn -borderwidth 1 -background $color(bg)
pack $w.frmCombo $w.frmBtn -side top -fill x
# set combo [entry $w.frmCombo.entFind]
label $w.frmCombo.lblModule -text "[::msgcat::mc "Convert to"] \"$action\"" -background $color(bg)
label $w.frmCombo.lblFile -text "[::msgcat::mc "File"] \"$file\"" -background $color(bg)
set combo [entry $w.frmCombo.txtString]
pack $w.frmCombo.lblModule $w.frmCombo.lblFile $combo -fill x -padx 2 -pady 2 -side top
button $w.frmBtn.btnFind -text [::msgcat::mc "Run"]\
-font $font(normal) -width 12 -relief groove -background $color(bg)\
-command {
set convert_cmd($act) [.cmd.frmCombo.txtString get]
Convert $act
destroy .cmd
}
button $w.frmBtn.btnCancel -text [::msgcat::mc "Close"]\
-relief groove -width 12 -font $font(normal) -background $color(bg)\
-command "destroy $w"
pack $w.frmBtn.btnFind $w.frmBtn.btnCancel -fill x -padx 2 -pady 2 -side left
bind $w <Return> {
set convert_cmd($act) [.cmd.frmCombo.txtString get]
Convert $act
destroy .cmd
}
bind $w <Escape> "destroy $w"
$combo insert end "$convert_cmd($action)"
focus -force $combo
}
proc Convert {action} {
global dir nb files font activeFile tcl_platform module convert_cmd makeThread tree
set curDir [pwd]
#set node [$nb raise]
if [info exists activeFile] {
set nod $activeFile
while {[set parentNode [$tree parent $nod]] != "root"} {
set nod $parentNode
}
} else {
return
}
if {[info exists files($nod)] == 0} {
return
}
if {$module(convert_$action) == ""} {
set answer [tk_messageBox\
-message "[::msgcat::mc "Don't find programm"] $convert_cmd($action)"\
-type ok -icon warning\
-title [::msgcat::mc "Warning"]]
case $answer {
ok {return 0}
}
}
set text "$nb.f$nod.f.text"
set fullPath [lindex $files($nod) 0]
set folder [file dirname $fullPath]
set file [file tail $fullPath]
set ext [string trim [file extension $file] {.}]
set name [file rootname $file]
##
set node "debug"
if {[$nb index $node] != -1} {
$nb delete debug
}
set w [$nb insert end $node -text [::msgcat::mc "Running project"]]
# create array with file names #
set w [frame $w.f]
pack $w -side top -fill both -expand true
frame $w.frame -borderwidth 2 -relief ridge
pack $w.frame -side top -fill both -expand true
text $w.frame.text -yscrollcommand "$w.frame.yscroll set" \
-relief sunken -wrap word -highlightthickness 0 -font $font(normal)\
-selectborderwidth 0 -selectbackground #55c4d1 -width 10 -height 10
scrollbar $w.frame.yscroll -relief sunken -borderwidth {1} -width {10} -takefocus 0 \
-command "$w.frame.text yview"
pack $w.frame.text -side left -fill both -expand true
pack $w.frame.yscroll -side left -fill y
## READLINE WIDGET ##
frame $w.frmReadline -borderwidth 2 -relief ridge -height 5
pack $w.frmReadline -side top -fill x
text $w.frmReadline.text2 -yscrollcommand "$w.frmReadline.yscroll2 set" \
-relief sunken -wrap word -highlightthickness 0 -font $font(normal)\
-selectborderwidth 0 -selectbackground #55c4d1 -width 10 -height 5
scrollbar $w.frmReadline.yscroll2 -relief sunken -borderwidth {1} -width {10} -takefocus 0 \
-command "$w.frmReadline.text2 yview"
pack $w.frmReadline.text2 -side left -fill both -expand true
pack $w.frmReadline.yscroll2 -side left -fill y
bind $w.frmReadline.text2 <Return> ReadLine
balloon $w.frmReadline.text2 set [::msgcat::mc "Enter LaTeX command here and push Enter"]
pane::create $w.frame $w.frmReadline -orient horizontal -percent 0.9
# key bindings #
$nb raise $node
#insert debug data into text widget #
set pos [$w.frame.text index insert]
set lineNum [lindex [split $pos "."] 0]
$w.frame.text insert end "[::msgcat::mc "Work with file"] $fullPath\n"
if {[catch {cd $folder}] != 0} {return ""}
FileDialog save
set cmdString $convert_cmd($action)
if [regexp -nocase "%dirName" $convert_cmd($action) v] {
regsub -all -- {%dirName} $cmdString $folder cmdString
puts "$cmdString"
}
if [regexp -nocase "%fileName" $convert_cmd($action) v] {
regsub -all -- {%fileName} $cmdString $name cmdString
puts "$cmdString"
} else {
set cmdString "$convert_cmd($action) $fullPath"
}
puts "$cmdString"
$w.frame.text insert end "[::msgcat::mc "Make"] $action [::msgcat::mc "file"]\n"
$w.frame.text insert end "$cmdString\n\n"
set pipe [open "|$cmdString" "w+"]
set makeThread $pipe
$w.frame.text insert end "----------------- [::msgcat::mc "Programm output"] -----------------\n"
$w.frame.text tag add bold $lineNum.0 $lineNum.end
focus -force $w.frmReadline.text2
fileevent $pipe readable [list DebugInfo $w.frame.text $pipe $folder]
fconfigure $pipe -buffering none -blocking no
catch {cd $curDir}
}
proc ReadLine {} {
global makeThread
set pos [.frmBody.frmEditor.noteBook.fdebug.f.frmReadline.text2 index insert]
set lineNumber [lindex [split $pos "."] 0]
set cmd [.frmBody.frmEditor.noteBook.fdebug.f.frmReadline.text2 get $lineNumber.0 $lineNumber.end]
puts $cmd
fileevent $makeThread writable
if [info exists makeThread] {
puts $makeThread "$cmd"
}
}
proc ConvertImage {file} {
global dir convert_cmd render activeFile files nb thumb
set file [string trimleft [string trimright $file "\}"] "\{"]
set inFormat [GetExtention $file]
set name [file rootname [file tail $file]]
set imgFile "$name.$thumb(format)"
puts "$file\t$imgFile"
set _dir [file join [file dirname $file] .thumb]
if {[file exists $_dir] == 0} { file mkdir $_dir }
if [file exists [file join $_dir $imgFile]] {
puts "File exists [file join $_dir $imgFile]"
return "[file join $_dir $imgFile]"
} else {
puts "$convert_cmd(img) +adjoin +antialias -quality 10 -transparent $render(bg) -density $render(res) $file $_dir/$imgFile"
}
#set file [file tail $file]
if {$render(trans) == 1} {
if {$render(aa) == 1} {
catch [exec $convert_cmd(img) +adjoin -antialias -quality 10 -transparent $render(bg) -scale $thumb(resolution) $file [file join $_dir $imgFile]] err
} else {
catch [exec $convert_cmd(img) +adjoin +antialias -quality 10 -transparent $render(bg) -scale $thumb(resolution) $file [file join $_dir $imgFile]] err
}
} else {
if {$render(aa) == 1} {
catch [exec $convert_cmd(img) +adjoin -antialias -quality 10 -scale $thumb(resolution) $file [file join $_dir $imgFile]] err
} else {
catch [exec $convert_cmd(img) +adjoin +antialias -quality 10 -scale $thumb(resolution) $file [file join $_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
}
return "[file join $_dir $imgFile]"
}

674
lib/modules/editor.tcl Executable file
View File

@@ -0,0 +1,674 @@
#########################################################
# TkTeXeditor
# Distributed under GNU Public License
# Author: Sergey Kalinin (BanZaj) banzaj@lrn.ru
# Copyright (c) "CONERO lrn", 2000, http//conero.lrn.ru
#########################################################
## FILE EDITOR WINDOW ##
proc EditFile {file} {
global dir font tree nb files color files index status activeFile treeStruct ver
global editor backup status replace sysenc release
wm title . "TkLaTeXEditor $ver$release - $file"
if {[file exists $file] == 0} {
set answer [tk_messageBox -message "$f [::msgcat::mc "File not found"]"\
-type ok -icon warning -title [::msgcat::mc "Warning"]]
case $answer {
ok {return}
}
}
set fileName [file tail $file]
set fileDir [file dirname $file]
set dir(current) $fileDir
puts "============ $fileName $fileDir"
set node [InsertTreeNode $fileName $fileDir]
#set node [NodeInsert $fileName $fileDir ""]
set activeFile $node
set replace 0 ;# for Overwrite procedure# execute external editor #
if {$editor(extern)=="Yes"} {
set pipe [open "|$editor(prog) $file" "r"]
fileevent $pipe readable
fconfigure $pipe -buffering none -blocking no
return
}
## check active file and if them don't exists return 0
if {[info exists files($node)] != 1} {
set files($node) [list $file 0]
set w [$nb insert end $node -text "$fileName"]
} else {
# puts "$file - already opened"
return
}
## update statusbar info
$status(fileAttr) configure -text "[FileAttr $file]"
$status(fileSize) configure -text "[file size $file] b."
$status(encode) configure -text "[lindex $files($node) 2]"
## create frames and text widget #
frame $w.f -borderwidth 2 -relief ridge
pack $w.f -side top -fill both -expand true
#supertext::text
supertext::text $w.f.text -yscrollcommand "$w.f.yscroll set" \
-relief sunken -wrap $editor(wrap) -highlightthickness 0 -font $font(editNormal)\
-background $color(editBg) -foreground $color(editFg)\
-selectborderwidth 0 -selectbackground $color(selectbg) -width 10
# lines numbering
#set txtLineNumber [text $w.f.text_lines -yscrollcommand "$w.f.yscroll set" \
#-relief sunken -wrap $editor(wrap) -highlightthickness 0 -font $font(editNormal)\
#-background $color(lineNumberBg) -foreground $color(lineNumberFg)\
#-selectborderwidth 0 -selectbackground $color(selectbg) -width 5]
scrollbar $w.f.yscroll -relief sunken -borderwidth {1} -width {10} -takefocus 0 \
-command "$w.f.text yview"
#pack $w.f.text_lines -side left -fill y
pack $w.f.text -side left -fill both -expand true
pack $w.f.yscroll -side left -fill y
$nb raise $node
## loadig tags for highlight procedure
LoadTag $w.f.text
#puts $w.f.text
## BACKUP FILE CREATED ##
if {$backup(create) == "Yes"} {
file copy -force -- $file [file join $dir(tmp) $fileName~]
}
## OPENED FILE ##
set fHandle [open "$file" r]
set sourceEnc [DocRecode $fHandle]
if {$sourceEnc == ""} {
set sourceEnc [encoding system]
}
lappend files($node) "$sourceEnc" ;# added encoding information
$status(encode) configure -text "[lindex $files($node) 2]"
set lineNumber 1
$treeStruct delete [$treeStruct nodes root] ;# delete all info about old structure
while {[gets $fHandle line]>=0} {
set line [encoding convertfrom $sourceEnc $line]
$w.f.text insert end "[string trimright $line]\n"
InsertStruct $node $line $lineNumber $fileDir
HighLightTEX $w.f.text $line $lineNumber $node
#$txtLineNumber insert end "$lineNumber\n"
incr lineNumber
}
close $fHandle
# key bindings #
set text $w.f.text
bind $text <Control-G> GoToLine
bind $text <Control-g> GoToLine
bind $text <Control-F> Find
bind $text <Control-f> Find
#bind $text <F2> SplitWindow
#bind $text <F6> {ConvertDialog ps}
#bind $text <F7> {ConvertDialog pdf}
bind $text <Control-R> ReplaceDialog
bind $text <Control-r> ReplaceDialog
#bind $text <F4> {ReplaceCommand $w.frame.text 1}
bind $text <Control-S> {FileDialog save}
bind $text <Control-s> {FileDialog save}
bind $text <Control-A> {FileDialog save_as}
bind $text <Control-a> {FileDialog save_as}
bind $text <Control-W> {FileDialog close}
bind $text <Control-w> {FileDialog close}
bind $text <Control-X> "tk_textCut $w.f.text;break"
bind $text <Control-x> "tk_textCut $w.f.text;break"
bind $text <Control-C> "tk_textCopy $w.f.text;break"
bind $text <Control-c> "tk_textCopy $w.f.text;break"
bind $text <Control-V> "tk_textPaste $w.f.text;break"
bind $text <Control-v> "tk_textPaste $w.f.text;break"
bind $text <Control-q> exit
bind $text <Control-Q> exit
bind $text <Control-z> "$text undo"
bind $text <Control-Z> "$text undo"
bind $text <Alt-c> AutoComplit
bind $text <Alt-C> AutoComplit
bind $text <Alt-f> "GenerateFormula math"
bind $text <Alt-F> "GenerateFormula math"
bind $text <Alt-t> "GenerateFormula text"
bind $text <Alt-T> "GenerateFormula text"
bind $text <ButtonRelease-1> {$status(pos) configure -text [%W index insert]}
bind $text <Insert> {OverWrite}
bind $text <Button-3> {catch [PopupMenu %W %X %Y]}
bind $text <KeyRelease-Return> {
AddText item
set pos [%W index insert]
set line [lindex [split $pos "."] 0]
set editLine [%W get $line.0 $pos]
HighLightTEX %W $editLine $line [$nb raise]
set node [$nb raise]
if {$node == "" || $node == "debug" || $node == "settings" || $node == "about"} {return 1}
if {[lindex $files($node) 1] == 0} {
set files($node) [list [lindex $files($node) 0] 1 [lindex $files($node) 2]]
$status(active) configure -text [::msgcat::mc "File modify"]
$nb itemconfigure $node -foreground $color(editTitleModify)
}
}
bind $text <KeyRelease> {
set node [$nb raise]
if {$node == "" || $node == "debug" || $node == "settings" || $node == "about"} {return 1}
set text "$nb.f$node.f.text"
set pos [$text index insert]
set line [lindex [split $pos "."] 0]
set symbol [lindex [split $pos "."] 1]
set editLine [$text get $line.0 $pos]
HighLightTEX $text $editLine $line $node
$status(pos) configure -text [$text index insert];# cursor position
if {$symbol >= $editor(strLen)} {
if {[Key %k] == "true"} {
if {$editor(strWrap) == "Yes"} {
#$text insert $line.end "\n"
set p [$text search -backward -regexp -- {\s} $pos $line.0]
if {$p !=""} {
$text insert "$p + 1 chars" "\n"
}
}
}
}
if {[Key %k] == "true"} {
if {[lindex $files($node) 1] == 0} {
set files($node) [list [lindex $files($node) 0] 1 [lindex $files($node) 2]]
$status(active) configure -text [::msgcat::mc "File modify"]
$nb itemconfigure $node -foreground $color(editTitleModify)
}
}
}
bind $text <KeyPress> {
if {[Key %k] == "true"} {
ReplaceChar %W
}
set node [$nb raise]
if {$node == "" || $node == "debug" || $node == "settings" || $node == "about"} {return 1}
set text "$nb.f$node.f.text"
set pos [$text index insert]
set line [lindex [split $pos "."] 0]
set symbol [lindex [split $pos "."] 1]
set editLine [$text get $line.0 $pos]
HighLightTEX $text $editLine $line $node
$status(pos) configure -text [$text index insert];# cursor position
if {$symbol >= $editor(strLen)} {
if {[Key %k] == "true"} {
if {$editor(strWrap) == "Yes"} {
#$text insert $line.end "\n"
set p [$text search -backward -regexp -- {\s} $pos $line.0]
if {$p !=""} {
$text insert "$p + 1 chars" "\n"
}
}
}
}
}
bind $text <KeyPress-space> {
if {[Key %k] == "true"} {
ReplaceChar %W
}
}
bind $text <KeyRelease-space> {
set node [$nb raise]
if {$node == "" || $node == "debug" || $node == "settings" || $node == "about"} {return 1}
if {[lindex $files($node) 1] == 0} {
set files($node) [list [lindex $files($node) 0] 1 [lindex $files($node) 2]]
$status(active) configure -text [::msgcat::mc "File modify"]
$nb itemconfigure $node -foreground $color(editTitleModify)
}
}
bind $text <Control-u> {
set i -1
switch -- [%W get "insert - 1 chars"] {
\{ {set i [_searchCloseBracket %W \{ \} insert end]}
\[ {set i [_searchCloseBracket %W \[ \] insert end]}
( {set i [_searchCloseBracket %W ( ) insert end]}
\} {set i [_searchOpenBracket %W \{ \} insert 1.0]}
\] {set i [_searchOpenBracket %W \[ \] insert 1.0]}
) {set i [_searchOpenBracket %W ( ) insert 1.0]}
} ;# switch
if { $i != -1 } {
%W mark set insert $i
%W see insert
}
} ;# bind
bindtags $text [list [winfo toplevel $text] $text Text sysAfter all]
bind sysAfter <Any-Key> {+ set i -1
catch {
switch -- [%W get "insert - 1 chars"] {
\{ {set i [_searchCloseBracket %W \{ \} insert end]}
\[ {set i [_searchCloseBracket %W \[ \] insert end]}
( {set i [_searchCloseBracket %W ( ) insert end]}
\} {set i [_searchOpenBracket %W \{ \} insert 1.0]}
\] {set i [_searchOpenBracket %W \[ \] insert 1.0]}
) {set i [_searchOpenBracket %W ( ) insert 1.0]}
} ;# switch
catch { %W tag remove lightBracket 1.0 end }
if { $i != -1 } {%W tag add lightBracket "$i - 1 chars" $i}
}
} ;# bind sysAfter
bind sysAfter <Button-1> [bind sysAfter <Any-Key>]
focus -force $w.f.text
Timer $file "refresh"
if {$backup(autosave) == "Yes"} {
Timer $file "autosave"
}
};# proc EditFile
proc _searchCloseBracket { widget o_bracket c_bracket start_pos end_pos } {
set o_count 1
set c_count 0
set found 0
set pattern "\[\\$o_bracket\\$c_bracket\]"
set pos [$widget search -regexp -- $pattern $start_pos $end_pos]
while { ! [string equal $pos {}] } {
set char [$widget get $pos]
#tk_messageBox -title $pattern -message "char: $char; $pos; o_count=$o_count; c_count=$c_count"
if {[string equal $char $o_bracket]} {incr o_count ; set found 1}
if {[string equal $char $c_bracket]} {incr c_count ; set found 1}
if {($found == 1) && ($o_count == $c_count) } { return [$widget index "$pos + 1 chars"] }
set found 0
set start_pos "$pos + 1 chars"
set pos [$widget search -regexp -- $pattern $start_pos $end_pos]
} ;# while search
return -1
} ;# proc _searchCloseBracket
# DEDERER
## Search open bracket in editor widget
proc _searchOpenBracket { widget o_bracket c_bracket start_pos end_pos } {
set o_count 0
set c_count 1
set found 0
set pattern "\[\\$o_bracket\\$c_bracket\]"
set pos [$widget search -backward -regexp -- $pattern "$start_pos - 1 chars" $end_pos]
while { ! [string equal $pos {}] } {
set char [$widget get $pos]
#tk_messageBox -title $pattern -message "char: $char; $pos; o_count=$o_count; c_count=$c_count"
if {[string equal $char $o_bracket]} {incr o_count ; set found 1}
if {[string equal $char $c_bracket]} {incr c_count ; set found 1}
if {($found == 1) && ($o_count == $c_count) } { return [$widget index "$pos + 1 chars"] }
set found 0
set start_pos "$pos - 0 chars"
set pos [$widget search -backward -regexp -- $pattern $start_pos $end_pos]
} ;# while search
return -1
} ;# proc _searchOpenBracket
proc GoToLine {} {
global nb files font color
set node [$nb raise]
if {$node == "newproj" || $node == "settings" || $node == "about" || $node == ""} {
return
}
set file $files($node)
set w $nb.f$node.goto
set text "$nb.f$node.f.text"
# destroy the find window if it already exists
if {[winfo exists $w]} {
destroy $w
}
# create the new "goto" window
toplevel $w
wm title $w [::msgcat::mc "Goto line"]
wm resizable $w 0 0
wm transient $w $nb.f$node
label $w.text -text [::msgcat::mc "Line number"] -font $font(normal) -background $color(bg)
entry $w.entGoTo -width 6 -validate key -validatecommand "ValidNumber %W %P"
pack $w.text $w.entGoTo -side left -anchor nw -padx 2 -pady 2
set line [$w.entGoTo get]
bind $w.entGoTo <Return> "+GoToLineNumber $text $nb.f$node"
bind $w.entGoTo <Escape> "destroy $w"
focus -force $w.entGoTo
}
## Check input number ##
proc ValidNumber {w value} {
if [string is integer $value] {
return 1
} else {
bell
return 0
}
}
## GOTO LINE ##
proc GoToLineNumber {text w} {
global status
set lineNumber [$w.goto.entGoTo get]
destroy $w.goto
catch {
$text mark set insert $lineNumber.0
$text see insert
}
$status(pos) configure -text [$text index insert];# cursor position
}
## SEARCH DIALOG FORM ##
set findHistory ""
set findString ""
set replaceString ""
proc Find {} {
global nb files font findHistory findString color
set node [$nb raise]
if {$node == "newproj" || $node == "settings" || $node == "about" || $node == ""} {
return
}
set file $files($node)
set w $nb.f$node.find
set text "$nb.f$node.f.text"
set findString ""
# destroy the find window if it already exists
if {[winfo exists $w]} {
destroy $w
}
toplevel $w
wm title $w [::msgcat::mc "Find"]
wm resizable $w 0 0
wm transient $w $nb.f$node
frame $w.frmCombo -borderwidth 1 -background $color(bg)
frame $w.frmBtn -borderwidth 1 -background $color(bg)
pack $w.frmCombo $w.frmBtn -side top -fill x
# set combo [entry $w.frmCombo.entFind]
set combo [ComboBox $w.frmCombo.txtLocale\
-textvariable findString -background $color(bg)\
-selectbackground "#55c4d1" -selectborderwidth 0\
-values $findHistory]
pack $combo -fill x -padx 2 -pady 2
button $w.frmBtn.btnFind -text "[::msgcat::mc "Find"] - F3"\
-font $font(normal) -width 12 -relief groove -background $color(bg)\
-command "FindCommand $text $w"
button $w.frmBtn.btnCancel -text "[::msgcat::mc "Close"] - Esc"\
-relief groove -width 12 -font $font(normal) -background $color(bg)\
-command "destroy $w"
pack $w.frmBtn.btnFind $w.frmBtn.btnCancel -fill x -padx 2 -pady 2 -side left
bind $w <Return> "FindCommand $text $w"
bind $w <F3> "FindCommand $text $w"
bind $w <Escape> "destroy $w"
focus -force $combo
# set findIndex [lsearch -exact $findHistory "$findString"]
$combo setvalue @0
}
proc FindCommand {text w} {
global findString findHistory
# set findString [$entry get]
destroy $w
# if null string? do nothing
if {$findString == ""} {
return
}
# search "again" (starting from current position)
FindNext $text 0
}
proc FindNext {text {incr 1}} {
global findString findHistory
set t $text
# append find string into find history list #
if {[lsearch -exact $findHistory $findString] == -1} {
set findHistory [linsert $findHistory 0 $findString]
}
set pos [$t index insert]
set line [lindex [split $pos "."] 0]
set x [lindex [split $pos "."] 1]
incr x $incr
set pos [$t search -nocase $findString $line.$x end]
# if found then move the insert cursor to that position, otherwise beep
if {$pos != ""} {
$t mark set insert $pos
$t see $pos
# highlight the found word
set line [lindex [split $pos "."] 0]
set x [lindex [split $pos "."] 1]
set x [expr {$x + [string length $findString]}]
$t tag remove sel 1.0 end
$t tag add sel $pos $line.$x
focus -force $t
return 1
} else {
bell
return 0
}
catch [$status(pos) configure -text [%W index insert]] ;# cursor position
}
## FIND FUNCTION PROCEDURE ##
proc FindProc {text findString node} {
global nb status
set pos "0.0"
$text see $pos
set line [lindex [split $pos "."] 0]
set x [lindex [split $pos "."] 1]
set pos [$text search -nocase $findString $line.$x end]
$text mark set insert $pos
$text see $pos
# highlight the found word
set line [lindex [split $pos "."] 0]
set x [lindex [split $pos "."] 1]
set x [expr {$x + [string length $findString]}]
$text tag remove sel 1.0 end
$text tag add sel $pos $line.$x
focus -force $text
catch [$status(pos) configure -text [$text index insert]] ;# cursor position
return 1
}
#3 REPLACE DIALOG FORM ##
proc ReplaceDialog {} {
global nb font files findString replaceString text color
set node [$nb raise]
if {$node == "newproj" || $node == "settings" || $node == "about" || $node == ""} {
return
}
#set file $files($node)
set w .replace
set text "$nb.f$node.f.text"
# 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 title $w [::msgcat::mc "Replace"]
wm resizable $w 0 0
set f1 [frame $w.frmFind -background $color(bg)]
set f2 [frame $w.frmReplace -background $color(bg)]
set f3 [frame $w.frmBtn -borderwidth 1 -background $color(bg)]
pack $f1 $f2 $f3 -side top -fill x -expand true
label $f1.lblFind -text [::msgcat::mc "Find"] -font $font(normal) -width 15 -anchor w -background $color(bg)
entry $f1.entFind -width 30
pack $f1.lblFind $f1.entFind -side left -padx 2 -pady 2
pack $f1.entFind -side left -fill x -expand true -padx 2 -pady 2
label $f2.lblReplace -text [::msgcat::mc "Replace with"] -font $font(normal) -width 15 -anchor w -background $color(bg)
entry $f2.entReplace -width 30
pack $f2.lblReplace $f2.entReplace -side left -padx 2 -pady 2
pack $f2.entReplace -side left -fill x -expand true -padx 2 -pady 2
button $f3.btnFind -text "[::msgcat::mc "Find"] - Enter" -width 12 -pady 0 -font $font(normal) -relief groove -background $color(bg)\
-command "ReplaceCommand $text $w $f1.entFind $f2.entReplace find"
button $f3.btnReplace -text "[::msgcat::mc "Replace"] - F4" -width 12 -pady 0\
-font $font(normal) -relief groove -background $color(bg)\
-command {
ReplaceCommand $text $w .replace.frmFind.entFind .replace.frmReplace.entReplace replace
focus -force .replace
}
button $f3.btnReplaceAll -text [::msgcat::mc "Replace all"] -width 12 -pady 0\
-font $font(normal) -relief groove -background $color(bg)\
-command "ReplaceCommand $text $w $f1.entFind $f2.entReplace replace_all"
button $f3.btnCancel -text "[::msgcat::mc "Cancel"] - Esc" -command "destroy $w"\
-width 12 -pady 0 -font $font(normal) -relief groove -background $color(bg)
pack $f3.btnFind $f3.btnReplace $f3.btnReplaceAll $f3.btnCancel\
-side left -padx 2 -pady 2 -fill x
bind $w <Return> "ReplaceCommand $text $w $f1.entFind $f2.entReplace find"
bind $w <F4> "ReplaceCommand $text $w $f1.entFind $f2.entReplace replace"
bind $w <Escape> "destroy $w"
focus -force $f1.entFind
if {$findString != ""} {
$f1.entFind insert end $findString
}
if {$replaceString != ""} {
$f2.entReplace insert end $replaceString
}
}
## REPLACE COMMAND ##
proc ReplaceCommand {text w entFind entReplace command} {
global nb font files findString replaceString
set node [$nb raise]
set findString [$entFind get]
set replaceString [$entReplace get]
switch -- $command {
"find" {
FindNext $text 1
focus -force .replace
}
"replace" {
if {[Replace $text 0]} {
FindNext $text 1
if {[lindex $files($node) 1] == 0} {
set files($node) [list [lindex $files($node) 0] 1 [lindex $files($node) 2]]
}
focus -force .replace
}
}
"replace_all" {
set stringsReplace 0
if {[Replace $text 0]} {
if {[lindex $files($node) 1] == 0} {
set files($node) [list [lindex $files($node) 0] 1 [lindex $files($node) 2]]
}
incr stringsReplace
while {[Replace $text 1]} {
incr stringsReplace
}
}
tk_messageBox -icon info -title [::msgcat::mc "Replace"]\
-parent $text -message\
"[::msgcat::mc "Was replacement"] $stringsReplace."
destroy $w
}
}
}
## REPLACE ONE WORD PROCEDURE ##
proc Replace {text incr} {
global nb font files findString replaceString
if {[FindNext $text $incr]} {
set selected [$text tag ranges sel]
set start [lindex $selected 0]
set end [lindex $selected 1]
$text delete $start $end
$text insert [$text index insert] $replaceString
return 1
} else {
return 0
}
# focus -force .replace
}
## OVERWRITE SYMBOL PROCEDURE ##
proc OverWrite {} {
global replace fontNormal status
if {$replace == 1} {
set replace 0
$status(ovwrt) configure -text [::msgcat::mc "Insert"] -foreground black
} else {
set replace 1
$status(ovwrt) configure -text [::msgcat::mc "Overwrite"] -foreground red
}
}
proc ReplaceChar {text} {
global replace
set pos [$text index insert]
set posY [lindex [split $pos "."] 0]
set posX [lindex [split $pos "."] 1]
if {$replace == 1} {
$text delete $posY.$posX $posY.[expr $posX + 1]
}
}
## GET KEYS CODE ##
proc Key {key} {
#puts $key ;#debug
if {$key >= 10 && $key <= 22} {return "true"}
if {$key >= 24 && $key <= 36} {return "true"}
if {$key >= 38 && $key <= 50} {return "true"}
if {$key >= 51 && $key <= 61 && $key != 58} {return "true"}
if {$key >= 79 && $key <= 91} {return "true"}
if {$key == 63 || $key == 107 || $key == 108 || $key == 112} {return "true"}
if {$key == 98 || $key == 100 || $key == 102 || $key == 104} {return "false"}
}
## SPLIT EDITOR WINDOW PROCEDURE ##
set split 0
proc SplitWindow {} {
global color font editor nb activeFile split
if [info exists activeFile] {
set w $nb.f$activeFile
} else {
return
}
if {$split == 0} {
frame $w.f1 -borderwidth 2 -relief ridge
pack $w.f1 -side top -fill both -expand true
#supertext::text
supertext::text $w.f1.text -yscrollcommand "$w.f1.yscroll set" \
-relief sunken -wrap $editor(wrap) -highlightthickness 0 -font $font(editNormal)\
-background $color(editBg) -foreground $color(editFg)\
-selectborderwidth 0 -selectbackground $color(selectbg) -width 10
scrollbar $w.f1.yscroll -relief sunken -borderwidth {1} -width {10} -takefocus 0 \
-command "$w.f1.text yview"
pack $w.f1.text -side left -fill both -expand true
pack $w.f1.yscroll -side left -fill y
##############################################
pane::create $w.f $w.f1 -orient horizontal -percent 0.5
set split 1
} elseif {$split == 1} {
destroy $w.f1
}
}

238
lib/modules/encode.tcl Executable file
View File

@@ -0,0 +1,238 @@
###########################################################
# Tcl/Tk project Manager
# Distributed under GNU Public License
# Author: Sergey Kalinin banzaj@lrn.ru
# Copyright (c) "CONERO lab", 2002, http://conero.lrn.ru
###########################################################
###########################################################
# ENCODING files procedure #
###########################################################
proc GetCorrectEncode {latexEncode} {
global files dir activeFile files
set f [open "[file join $dir(work) encode.lst]" r]
set encodeList [encoding names]
while {[gets $f line]} {
if {[string index [string trim $line] 0] == "#"} {
continue
}
scan $line "%s%s" texEnc tclEnc
#puts "$texEnc $tclEnc"
if {$texEnc == $latexEncode} {
close $f
return $tclEnc
} else {
set ind [lsearch -exact $encodeList $latexEncode]
#puts $latexEncode
if {$ind == -1} {
set answer [tk_messageBox\
-message "[lindex $files($activeFile) 0] [::msgcat::mc "Don't find any system encoding for"] $latexEncode \
[::msgcat::mc "You must write correctly encode name in"] [file join $dir(work) encode.lst] [::msgcat::mc "file"]"\
-type ok -icon warning\
-title [::msgcat::mc "Warning"]]
case $answer {
ok {return}
}
close $f
return $latexEncode
} else {
close $f
return $latexEncode
}
}
}
}
proc EncodeDialog {type} {
global color files activeFile
set w .encode
# destroy the find window if it already exists
if {[winfo exists .encode]} {
destroy .encode
}
toplevel .encode
wm title .encode [::msgcat::mc "Encoding"]
wm resizable .encode 0 0
wm transient .encode .
frame .encode.encodings -width 10
eval {
listbox .encode.encodings.list -height 10 -width 20 -selectbackground $color(selectbg)\
-selectborderwidth 0 -yscrollcommand {.encode.encodings.yscroll set}
}
eval {scrollbar .encode.encodings.yscroll -orient vertical -command {.encode.encodings.list yview}}
pack .encode.encodings.list -side left -expand true -fill y
pack .encode.encodings.yscroll -side left -expand false -fill y
pack .encode.encodings -side top -expand true -fill both
canvas .encode.line -border 0 -height 1 -background black -width 10
pack .encode.line -side top -expand true -fill x
frame .encode.command -width 10
if {$type == "file"} {
eval {
button .encode.command.ok -text [::msgcat::mc "Ok"] -command {
SetEncode [.encode.encodings.list get [.encode.encodings.list curselection]]
}
}
} else {
eval {
button .encode.command.ok -text [::msgcat::mc "Ok"] -command {
TextRecode [.encode.encodings.list get [.encode.encodings.list curselection]]
}
}
}
eval {button .encode.command.cancel -text [::msgcat::mc "Cancel"] -command {destroy .encode }}
grid .encode.command.ok -row 0 -column 0 -sticky e -pady 2 -padx 2
grid .encode.command.cancel -row 0 -column 1 -sticky w -pady 2 -padx 2
pack .encode.command -side top -expand true -fill x
bind .encode.encodings.list <Double-1> {eval [.encode.command.ok cget -command]}
bind .encode.encodings.list <Return> {eval [.encode.command.ok cget -command]}
bind .encode <Escape> {eval [.encode.command.cancel cget -command]}
set i 0 ; set cur_encoding [encoding system]
foreach { name_encodings } [lsort [encoding names] ] {
.encode.encodings.list insert end $name_encodings
if { $name_encodings == $cur_encoding } { set enc_pos $i }
incr i
} ;# foreach encoding names
wm resizable .encode 0 0
.encode.encodings.list activate $enc_pos
.encode.encodings.list selection set $enc_pos $enc_pos
.encode.encodings.list see $enc_pos
focus -force .encode.encodings.list
}
## Source encode ##
proc DocRecode {pipe} {
global files tree activeFile
set parentNode [$tree parent $activeFile]
if [info exists files($parentNode)] {
set sourceEnc [lindex $files($parentNode) 2]
} else {
set sourceEnc [encoding system] ;#[EncodeDialog]
}
puts $sourceEnc
while {[gets $pipe line]>=0} {
if [regexp -nocase -all -- {(\\)(usepackage)(\[)(.*?)(\])(\{)inputenc(\})} $line match v1 v2 v3 sourceEnc v5 v6 v7] {
if [set ind [string last "," $sourceEnc]] {
set sourceEnc [string range $sourceEnc [expr $ind + 1] end]
}
puts "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> $sourceEnc"
set sourceEnc [GetCorrectEncode $sourceEnc]
puts "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> $sourceEnc"
}
}
fconfigure $pipe -encoding binary
seek $pipe 0 start
return $sourceEnc
}
## CHANGE SOURCE FIELE ENCODING ##
proc SetEncode {encode} {
global files activeFile status nb
destroy .encode
set files($activeFile) [list [lindex $files($activeFile) 0] [lindex $files($activeFile) 1] "$encode"]
#puts $files($activeFile)
$status(encode) configure -text "[lindex $files($activeFile) 2]"
}
## Reencoding text ##
proc TextRecode {encode} {
global files activeFile status nb
destroy .encode
set text $nb.f$activeFile.f.text
set contents [$text get 0.0 end]
#puts "[lindex $files($activeFile) 2] $encode"
set contents [encoding convertto [lindex $files($activeFile) 2] $contents]
set contents [encoding convertfrom $encode $contents]
$text delete 0.0 end
$text insert end $contents
unset text
SetEncode $encode
}
proc CheckEncoding {text} {
global files activeFile
set sourceEnc "" ;#[EncodeDialog]
set line [$text get 0.0 end]
if [regexp -nocase -all -- {(\\)(usepackage)(\[)(.*?)(\])(\{)inputenc(\})} $line match v1 v2 v3 sourceEnc v5 v6 v7] {
#break
if {$sourceEnc != "[lindex $files($activeFile) 2]"} {
set answer [tk_messageBox -message "[::msgcat::mc "Don't correctly setting document encoding! Save anyway?"]"\
-type yesno -icon warning\
-title [::msgcat::mc "Warning"]]
case $answer {
yes {return 1}
no {return 0}
}
}
puts "DocEnc-$sourceEnc ViewEnc-[lindex $files($activeFile) 2]"
}
}
## clipboard encode ##
set xselection ""
proc EncodeTextSelection {txt offset len} {
set ::xselection [eval $txt get [$txt tag ranges sel]]
encoding convertto \
[crange $::xselection $offset [expr $offset + $len - 1]]
}
proc EncodeEntrySelection {txt offset len} {
if [$txt selection present] {
set idx1 [$txt index sel.first]
set idx2 [$txt index sel.last]
set ::xselection [string range [$txt get] $idx1 $idx2]
encoding convertto \
[crange $::xselection $offset [expr $offset + $len - 1]]
} else {
set ::xselection ""
}
}
if {$tcl_platform(platform) == "win"} {
bind Text <Map> { selection handle %W "EncodeTextSelection %W"}
bind Entry <Map> { selection handle %W "EncodeEntrySelection %W"}
bind Text <Unmap> { selection handle %W {}}
bind Entry <Unmap> { selection handle %W {}}
bind Text <ButtonRelease-2> {
if [catch {set sel [selection get]}] continue
if {[selection own] == ""} {
set sel [encoding convertfrom $sel]
} else {
set sel $xselection
}
%W insert current $sel
}
bind Entry <ButtonRelease-2> {
if [catch {set sel [selection get]}] continue
if {[selection own] == ""} {
set sel [encoding convertfrom $sel]
} else {
set sel $xselection
}
%W insert insert $sel
}
}
#set class Text
#bind $class <Map> "selection handle %W \"unix::Encode${class}Selection %W\""
#bind $class <Unmap> { selection handle %W {}}
#proc EncodeTextSelection {txt offset len} {encoding convertto [eval $txt get [$txt tag ranges sel]]}

402
lib/modules/file.tcl Executable file
View File

@@ -0,0 +1,402 @@
######################################################
# 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\)"
}

575
lib/modules/gui.tcl Executable file
View File

@@ -0,0 +1,575 @@
######################################################
# TkTeXeditor
# Distributed under GNU Public License
# Author: Sergey Kalinin (BanZaj) banzaj@lrn.ru
# Copyright (c) "CONERO lrn", 2000, http//conero.lrn.ru
######################################################
######################################################
# #
# Programms main interface window #
# #
######################################################
## MAIN INTERFACE WINDOW ##
wm geometry . $gui(geometry)
set activeFile ""
wm title . "TkLaTeXEditor $ver$release"
wm iconname . "TkTeXEditor $ver$release"
wm protocol . WM_DELETE_WINDOW Quit
wm overrideredirect . 0
wm positionfrom . user
#wm resizable . 0 0
## main frames
frame .frmMenu -border 1 -relief raised -background $color(bg)
frame .frmTool -border 1 -relief raised -background $color(bg)
frame .frmToolEdit -border 1 -relief raised -background $color(bg)
frame .frmBody -border 1 -relief raised -background $color(bg)
frame .frmStatus -border 1 -relief sunken -background $color(bg)
pack .frmMenu -side top -padx 1 -fill x
pack .frmTool -side top -padx 1 -fill x
pack .frmToolEdit -side top -padx 1 -fill x
pack .frmBody -side top -padx 1 -fill both -expand true
pack .frmStatus -side top -padx 1 -fill x
## MENU ##
menubutton .frmMenu.mnuFile -text [::msgcat::mc "File"] -menu .frmMenu.mnuFile.m -font $font(normal) -background $color(bg)
set m [menu .frmMenu.mnuFile.m -background $color(bg)]
$m add cascade -label [::msgcat::mc "New"] -menu $m.new -font $font(normal)
set mn [menu $m.new -background $color(bg)]
$mn add command -label [::msgcat::mc "New file"] -command {FileDialog new}\
-font $font(normal) -accelerator "Ctrl+N"
$mn add command -label [::msgcat::mc "Create from template"] -command {FileDialog new_templ}\
-font $font(normal)
$mn add command -label [::msgcat::mc "New project"] -command {NewProj add ""}\
-font $font(normal) -state disable
$m add command -label [::msgcat::mc "Open"] -command {FileDialog open}\
-font $font(normal) -accelerator "Ctrl+O"
$m add command -label [::msgcat::mc "Save"] -command {FileDialog save}\
-font $font(normal) -accelerator "Ctrl+S"
$m add command -label [::msgcat::mc "Save as"] -command {FileDialog save_as}\
-font $font(normal) -accelerator "Ctrl+A"
$m add command -label [::msgcat::mc "Save all"] -command {FileDialog save_all}\
-font $font(normal)
$m add command -label [::msgcat::mc "Close"] -command {FileDialog close}\
-font $font(normal) -accelerator "Ctrl+W"
$m add command -label [::msgcat::mc "Close all"] -command {FileDialog close_all}\
-font $font(normal)
$m add command -label [::msgcat::mc "Delete"] -command {FileDialog delete}\
-font $font(normal) -accelerator "Ctrl+D"
$m add separator
$m add command -label [::msgcat::mc "Print"] -command {PrintDialog print}\
-font $font(normal) -accelerator "Ctrl+P" -state normal
#$m add separator
#$m add command -label [::msgcat::mc "Settings"] -command Settings -font $font(normal)
$m add separator
$m add command -label [::msgcat::mc "Exit"] -command Quit -font $font(normal) -accelerator "Ctrl+Q"
### DOCUMENT MENU ####
menubutton .frmMenu.mnuDoc -text [::msgcat::mc "Document"] -menu .frmMenu.mnuDoc.m -font $font(normal) -background $color(bg)
set m [menu .frmMenu.mnuDoc.m -background $color(bg)]
#$m add command -label [::msgcat::mc "Included packages"] -command {PackageDialog}\
#-font $font(normal) -state disable
# "convert to" submenu ##
$m add cascade -label "[::msgcat::mc "Convert to"] ..." -menu $m.convert -font $font(normal) -state normal
set mn [menu $m.convert -background $color(bg)]
$mn add command -label [::msgcat::mc "DVI"] -font $font(normal) -accelerator "F5" -state normal\
-command {ConvertDialog dvi}
$mn add command -label [::msgcat::mc "PS"] -font $font(normal) -accelerator "F6" -state normal\
-command {ConvertDialog ps}
$mn add command -label [::msgcat::mc "PDF"] -font $font(normal) -accelerator "F7" -state normal\
-command {ConvertDialog pdf}
$mn add command -label "HTML" -font $font(normal) -command {ConvertDialog html}\
$mn add separator
## "preview" submenu ##
$m add cascade -label [::msgcat::mc "Preview"] -menu $m.preview -font $font(normal) -state normal
set mn [menu $m.preview -background $color(bg)]
$mn add command -label "DVI" -command {Preview dvi} -font $font(normal)
$mn add command -label "PS" -command {Preview ps} -font $font(normal)
$mn add command -label "PDF" -command {Preview pdf} -font $font(normal)
$mn add command -label "HTML" -command {Preview html} -font $font(normal)
$m add separator
$m add command -label [::msgcat::mc "Spell check"] -font $font(normal) -state normal\
-command {
SpellCheck $nb.f[$nb raise].f.text
}
$m add command -label [::msgcat::mc "Encoding"] -font $font(normal) -state normal\
-command {EncodeDialog file}
$m add command -label [::msgcat::mc "Syntax check"] -command {DoModule syntax}\
-font $font(normal) -state disable
##.frmMenu 'EDIT' ##
menubutton .frmMenu.mnuEdit -text [::msgcat::mc "Edit"] -menu .frmMenu.mnuEdit.m -font $font(normal) -background $color(bg)
set m [menu .frmMenu.mnuEdit.m -background $color(bg)]
$m add command -label [::msgcat::mc "Undo"] -font $font(normal) -accelerator "Ctrl+Z"\
-state normal -command "CutPast undo"
$m add separator
$m add command -label [::msgcat::mc "Copy"] -font $font(normal) -accelerator "Ctrl+C"\
-command "CutPast copy"
$m add command -label [::msgcat::mc "Paste"] -font $font(normal) -accelerator "Ctrl+V"\
-command "CutPast paste"
$m add command -label [::msgcat::mc "Cut"] -font $font(normal) -accelerator "Ctrl+X"\
-command "CutPast cut"
$m add separator
$m add command -label [::msgcat::mc "Select All"] -command {Select all} -font $font(normal) -accelerator "Ctrl+/"
$m add command -label [::msgcat::mc "Remove selection"] -command {Select remove} -font $font(normal)\
-accelerator "Ctrl+\\"
$m add separator
$m add command -label [::msgcat::mc "Goto line"] -command GoToLine -font $font(normal)\
-accelerator "Ctrl+G"
$m add command -label [::msgcat::mc "Find"] -command Find -font $font(normal) -accelerator "Ctrl+F"
$m add command -label [::msgcat::mc "Replace"] -command ReplaceDialog -font $font(normal)\
-accelerator "Ctrl+R"
$m add separator
$m add cascade -label "[::msgcat::mc "Custom operations"] ..." -menu $m.hotkeys -font $font(normal) -state normal
menu $m.hotkeys -background $color(bg)
## MENU for selected text ##
set m [menu .frmMenu.mnuEdit.m.selection -background $color(bg)]
$m add command -label [::msgcat::mc "Select All"] -command {Select all} -font $font(normal) -accelerator "Ctrl+/"
$m add command -label [::msgcat::mc "Remove selection"] -command {Select remove} -font $font(normal)\
-accelerator "Ctrl+\\"
$m add separator
$m add command -label [::msgcat::mc "Copy"] -font $font(normal) -accelerator "Ctrl+C"\
-command "CutPast copy"
$m add command -label [::msgcat::mc "Paste"] -font $font(normal) -accelerator "Ctrl+V"\
-command "CutPast paste"
$m add command -label [::msgcat::mc "Cut"] -font $font(normal) -accelerator "Ctrl+X"\
-command "CutPast cut"
$m add separator
$m add command -label [::msgcat::mc "Preview formula"] -command {GenerateFormula math} -font $font(normal)\
-accelerator "Alt+F"
$m add command -label [::msgcat::mc "Preview text"] -command {GenerateFormula text} -font $font(normal)\
-accelerator "Alt+T"
$m add separator
$m add command -label [::msgcat::mc "Remove to file"] -command {SaveToFile remove} -font $font(normal)
$m add command -label [::msgcat::mc "Save as file"] -command {SaveToFile file} -font $font(normal)
$m add command -label [::msgcat::mc "Save as image"] -command {SaveToFile image} -font $font(normal)
## VIEW MENU ##
menubutton .frmMenu.mnuView -text [::msgcat::mc "View"] -menu .frmMenu.mnuView.m -font $font(normal) -state normal -background $color(bg)
set m [menu .frmMenu.mnuView.m -background $color(bg)]
$m add cascade -label [::msgcat::mc "Toolbar"] -menu $m.tool -font $font(normal)
set mn [menu $m.tool]
#$mn add command -label [::msgcat::mc "Create from template"] -command {FileDialog new_templ}\
#-font $font(normal)
$m add separator
$m add command -label [::msgcat::mc "Split window"] -font $font(normal) -accelerator "F2" -state disable\
-command {SplitWindow}
$m add command -label [::msgcat::mc "Encoding"] -font $font(normal) -state normal\
-command {EncodeDialog view}
## MODULES MENU ##
menubutton .frmMenu.mnuModule -text [::msgcat::mc "Modules"] -menu .frmMenu.mnuModule.m \
-underline 0 -font $font(normal) -background $color(bg)
## HELP MENU ##
menubutton .frmMenu.mnuHelp -text [::msgcat::mc "Help"] -menu .frmMenu.mnuHelp.m \
-underline 0 -font $font(normal) -background $color(bg)
set m [menu .frmMenu.mnuHelp.m -background $color(bg)]
$m add command -label [::msgcat::mc "Help"] -command ShowHelp \
-accelerator F1 -font $font(normal)
$m add command -label [::msgcat::mc "About ..."] -command AboutDialog \
-font $font(normal)
pack .frmMenu.mnuFile .frmMenu.mnuEdit .frmMenu.mnuDoc .frmMenu.mnuView .frmMenu.mnuModule -side left
pack .frmMenu.mnuHelp -side right
###############################################
frame .frmBody.frmList -background $color(bg)
frame .frmBody.frmEditor -background $color(bg)
pack .frmBody.frmList .frmBody.frmEditor -side left -fill both
## SPLIT BAR ##
pane::create .frmBody.frmList .frmBody.frmEditor
## TREE FRAME ##
set nbTree [NoteBook .frmBody.frmList.nBook -font $font(normal) -side $gui(tabsLabel) -background $color(bg)]
pack $nbTree -fill both -expand true -padx 2 -pady 2
set f [$nbTree insert end fileTree -text [::msgcat::mc "Files"] -background $color(bg)]
set fTree [ScrolledWindow $f.f -background $color(bg)]
pack $fTree -side top -fill both -expand yes -padx 0 -pady 0
set tree [Tree $fTree.tree \
-relief sunken -borderwidth 1 -width 1 -height 1 -highlightthickness 1\
-redraw 0 -dropenabled 1 -dragenabled 1 -dragevent 3 \
-background $color(editBg) -selectbackground $color(selectbg) \
-droptypes {TREE_NODE {copy {} move {} link {}}
LISTBOX_ITEM {copy {} move {} link {}}} -opencmd {} -closecmd {}]
$fTree setwidget $tree
#pack $tree -side left -fill both -expand yes
###############################################
set fStruct [$nbTree insert end fileStruct -text [::msgcat::mc "Document"] -background $color(bg)]
set fTreeStruct [ScrolledWindow $fStruct.fs -background $color(bg)]
pack $fTreeStruct -side top -fill both -expand yes
set treeStruct [Tree $fTreeStruct.treeStruct \
-relief sunken -borderwidth 1 -width 1 -height 1 -highlightthickness 1\
-redraw 0 -dropenabled 0 -dragenabled 0 -dragevent 3 \
-background $color(editBg) -selectbackground $color(selectbg) \
-showlines 1 -droptypes {
TREE_NODE {copy {} move {} link {}}
LISTBOX_ITEM {copy {} move {} link {}}
}]
$fTreeStruct setwidget $treeStruct
#pack $treeStruct -side left -fill both -expand yes
###############################################
set f [$nbTree insert end lblList -text [::msgcat::mc "Labels"] -background $color(bg)]
set fList [ScrolledWindow $f.f -background $color(bg)]
set lblList [ListBox $fList.list -font $font(normal) -relief sunken -borderwidth 1 -width 1 -height 1 -highlightthickness 1 -background $color(editBg) -selectbackground $color(selectbg)]
#pack $lblList -side left -fill both -expand yes
$fList setwidget $lblList
pack $fList -side top -fill both -expand yes
###############################################
set nb [NoteBook .frmBody.frmEditor.noteBook -font $font(normal) -side $gui(tabsLabel) -background $color(bg)]
pack $nb -fill both -expand true -padx 2 -pady 2
###############################################
set m .popupTabs
menu $m -font $font(normal)
$m add command -label [::msgcat::mc "Close"] -command {FileDialog close}\
-font $font(normal) -accelerator "Ctrl+W"
$m add command -label [::msgcat::mc "Close all"] -command {FileDialog close_all}\
-font $font(normal)
## KEYS BINDINGS ##
$tree bindText <Button-1> "TreeOneClick [$tree selection get]"
$tree bindImage <Button-1> "TreeOneClick [$tree selection get]"
$tree bindText <Shift-Button-1> {$tree selection add [$tree selection get]}
$tree bindImage <Shift-Button-1> {$tree selection add [$tree selection get]}
$treeStruct bindText <Button-1> "TreeStructOneClick [$treeStruct selection get]"
$treeStruct bindImage <Button-1> "TreeStructOneClick [$treeStruct selection get]"
$nb bindtabs <ButtonRelease> "ClickTab"
$nb bindtabs <Button-3> {catch [PopupMenuTab .popupTabs %X %Y]}
## MOUSE WHEEL BINDING ##
bind $fTree.tree.c <Button-4> "$tree yview scroll -3 units"
bind $fTree.tree.c <Button-5> "$tree yview scroll 3 units"
bind $fTree.tree.c <Shift-Button-4> "$tree xview scroll -2 units"
bind $fTree.tree.c <Shift-Button-5> "$tree xview scroll 2 units"
bind $fTree.tree.c <Button-3> {catch [tk_popup .frmMenu.mnuFile.m %X %Y]}
bind $fTreeStruct.treeStruct.c <Button-4> "$treeStruct yview scroll -3 units"
bind $fTreeStruct.treeStruct.c <Button-5> "$treeStruct yview scroll 3 units"
bind $fTreeStruct.treeStruct.c <Shift-Button-4> "$treeStruct xview scroll -2 units"
bind $fTreeStruct.treeStruct.c <Shift-Button-5> "$treeStruct xview scroll 2 units"
$lblList bindImage <ButtonRelease-1> "FindLabel [$lblList selection get]"
$lblList bindText <ButtonRelease-1> "FindLabel [$lblList selection get]"
bind $lblList.c <Button-4> "$lblList yview scroll -3 units"
bind $lblList.c <Button-5> "$lblList yview scroll 3 units"
bind $lblList.c <Shift-Button-4> "$lblList xview scroll -2 units"
bind $lblList.c <Shift-Button-5> "$lblList xview scroll 2 units"
bind . <Control-q> Quit
bind . <Control-Q> Quit
bind . <F1> ShowHelp
bind . <F5> {ConvertDialog dvi}
bind . <F6> {ConvertDialog ps}
bind . <F7> {ConvertDialog pdf}
bind . <Control-Next> {PageTab 1}
bind . <Control-Prior> {PageTab -1}
###############################################
## CREATE TOOLBARs ##
###############################################
set btnNum 0
proc CreateToolButton {frame command image hint keys} {
global dir btnNum color relief
if {$frame == "main"} {
set frm frmTool
} else {
set frm frmToolEdit
}
set comm [string trim $command "\""]
set btn [Button .$frm.$frame.btn_$btnNum -relief $relief(btn) -bd 1\
-command $comm -background $color(bg)]
image create photo img_$btnNum -format gif -file [file join $dir(img) $image]
$btn configure -image img_$btnNum
if {$keys != ""} {
set keys [string trim $keys "\""]
#puts "$keys - $comm"
bind . <$keys> "$comm"
}
pack $btn -side left
balloon $btn set [::msgcat::mc [string trim $hint "\""]]
incr btnNum
}
proc ReadToolBarFile {_dir} {
global dir font color file frm frame tool
foreach file [lsort [glob -nocomplain [file join $_dir toolbar *]]] {
puts "Found toolbar file - \'$file\'"
set frame [file tail $file]
if {$frame == "main"} {
set frm frmTool
} else {
set frm frmToolEdit
}
AddCheckBox .frmMenu.mnuView.m.tool $frame $file $frm
if {$tool($frame) == 1} {
ReadToolBar $file
}
}
}
proc AddCheckBox {m frame file frm} {
global font color tool
$m add checkbutton -label [::msgcat::mc "$frame"] -font $font(normal) -state normal\
-offvalue 0 -onvalue 1 -variable tool($frame) -selectcolor $color(selectbg)\
-command "ToolBar $frm $frame $file"\
-background $color(bg)
}
proc ReadToolBar {file} {
global dir font color
set frame [file tail $file]
puts "Create toolbar \'$frame\' from file \'$file\'"
if {$frame == "main"} {
set frm frmTool
} else {
set frm frmToolEdit
}
pack [frame .$frm.$frame -background $color(bg)] -side left -fill x
set fHandle [open $file]
while {[gets $fHandle line]>=0} {
set line [string trim $line]
set kw [string range $line 0 [expr [string first " " $line]-1]]
set l [string range $line [expr [string first " " $line] +1] end]
if {$kw == "button"} {
if [regexp -- {(\".*?\") (.*?) (\".*?\") (\".*?\")} $l m cmd img hint keys] {
#puts "$frame $cmd $img $hint"
CreateToolButton $frame $cmd $img $hint $keys
} elseif [regexp -- {(\".*?\") (.*?) (\".*?\")} $l m cmd img hint] {
CreateToolButton $frame $cmd $img $hint ""
}
}
if {$l == "Separator"} {
CreateSeparator $frame
}
if {$kw == "menu"} {
if [regexp -- {(.*?) (\".*?\")} $l m img hint] {
set menu [CreateToolMenu $frame $img $hint]
}
}
if {$kw == "cmd"} {
if [regexp -- {(\".*?\") (\".*?\") (\".*?\")} $l m cmd hint keys] {
InsertCommand $menu $cmd $hint "" $keys
} elseif [regexp -- {(\".*?\") (\".*?\")} $l m cmd hint] {
InsertCommand $menu $cmd $hint "" ""
}
if [regexp -- {separator} $l m] {
InsertSeparator $menu
}
}
if {$kw == "imagecmd"} {
if [regexp -- {(\".*?\") (\".*?\") (.*?)\.gif} $l m cmd hint im] {
InsertCommand $menu $cmd $hint $im ""
}
if [regexp -- {(\".*?\") (\".*?\") (.*?)\.gif (\".*?\")} $l m cmd hint im keys] {
InsertCommand $menu $cmd $hint $im $keys
}
}
}
close $fHandle
}
set mnuNum 0
proc CreateToolMenu {frame image hint} {
global dir font mnuNum color relief
if {$frame == "main"} {
set frm frmTool
} else {
set frm frmToolEdit
}
image create photo img_mnu$mnuNum -format gif -file [file join $dir(img) $image]
menubutton .$frm.$frame.m$mnuNum -image img_mnu$mnuNum -border 0\
-menu .$frm.$frame.m$mnuNum.m -background $color(bg) -relief $relief(menu)
set menu [menu .$frm.$frame.m$mnuNum.m -background $color(bg)]
pack .$frm.$frame.m$mnuNum -side left
balloon .$frm.$frame.m$mnuNum set [::msgcat::mc [string trim $hint "\""]]
incr mnuNum
return $menu
}
set cmdNum 0
proc InsertCommand {m cmd hint image keys} {
global font dir cmdNum color
set comm [string trim $cmd "\""]
set hint [string trim $hint "\""]
#puts "Create cmd - $m - $cmd $hint $image"
if {$keys != ""} {
set keys [string trim $keys "\""]
#puts "$keys - $comm"
bind . <$keys> "$comm"
if {$image != ""} {
set image [string trim $image]
image create photo img_$cmdNum -format gif -file [file join $dir(img) $image.gif]
$m add command -label [::msgcat::mc $hint] -font $font(normal) -state normal\
-command $comm -image img_$cmdNum -background $color(bg) -accelerator "$keys"
} else {
$m add command -label [::msgcat::mc $hint] -font $font(normal) -state normal\
-command $comm -background $color(bg) -accelerator "$keys"
}
} else {
if {$image != ""} {
set image [string trim $image]
image create photo img_$cmdNum -format gif -file [file join $dir(img) $image.gif]
$m add command -label [::msgcat::mc $hint] -font $font(normal) -state normal\
-command $comm -image img_$cmdNum -background $color(bg)
} else {
$m add command -label [::msgcat::mc $hint] -font $font(normal) -state normal\
-command $comm -background $color(bg)
}
}
incr cmdNum
}
proc InsertSeparator {m} {
$m add separator
}
proc CreateSeparator {frame} {
global dir btnNum color relief
if {$frame == "main"} {
set frm frmTool
} else {
set frm frmToolEdit
}
set btn [frame .$frm.$frame.btn_$btnNum -width 10 -background $color(bg) -borderwidth 0]
#set btn [Button .$frm.$frame.btn_$btnNum -relief $relief(btn) -bd 2 -background $color(bg) -width 0 -state disable]
pack $btn -side left -fill y -expand 1
incr btnNum
}
proc ToolBar {frm frame file} {
global tool
if {$tool($frame) == 0} {
#set tool($frame) 0
if {$frame == "main"} {
destroy .$frm.$frame
.frmTool configure -height 1
} else {
destroy .$frm.$frame
.frmToolEdit configure -height 1
}
return
} elseif {$tool($frame) == 1} {
#set tool($frame) 1
ReadToolBar $file
return
}
}
###############################################
proc CutPast {action} {
global nb
set node [$nb raise]
if {$node == "newproj" || $node == "settings" || $node == "about" || $node == ""} {
return
}
set text $nb.f$node.f.text
switch -- $action {
"copy" {
tk_textCopy $text
}
"cut" {
tk_textCut $text
}
"paste" {
tk_textPaste $text
}
"undo" {
$text undo
}
}
}
proc Select {type} {
global nb activeFile
set text $nb.f$activeFile.f.text
if {$type == "all"} {
$text tag remove sel 1.0 end
$text tag add sel 1.0 end
} elseif {$type == "remove"} {
$text tag remove sel 1.0 end
}
}
proc PopupMenu {text x y} {
set selIndex [$text tag ranges sel]
if {$selIndex != ""} {
tk_popup .frmMenu.mnuEdit.m.selection $x $y
} else {
tk_popup .frmMenu.mnuEdit.m $x $y
}
}
proc PopupMenuTab {menu x y} {
tk_popup $menu $x $y
}
###########
## STATUS BAR ##
set frm1 [frame .frmStatus.frmFileAttr -background $color(bg)]
set frm2 [frame .frmStatus.frmActive -background $color(bg)]
set frm3 [frame .frmStatus.frmFileSize -relief sunken -background $color(bg)]
set frm4 [frame .frmStatus.frmPos -background $color(bg)]
set frm5 [frame .frmStatus.frmFile -background $color(bg)]
set frm6 [frame .frmStatus.frmOvwrt -background $color(bg)]
set frm7 [frame .frmStatus.frmOther -background $color(bg)]
pack $frm1 $frm4 $frm6 $frm2 $frm5 $frm3 -side left -fill x
pack $frm7 -side left -fill x -expand true
set status(fileAttr) [label $frm1.lblFileAttr -width 30 -relief sunken -font $font(normal) -anchor w -background $color(bg)]
pack $frm1.lblFileAttr -fill x
set status(pos) [label $frm4.lblPos -width 10 -relief sunken -font $font(bold) -anchor w -background $color(bg)]
pack $frm4.lblPos -fill x
set status(ovwrt) [label $frm6.lblOvwrt -width 10 -relief sunken -font $font(normal) -anchor center -background $color(bg)]
pack $frm6.lblOvwrt -fill x
set status(active) [label $frm2.lblActive -width 25 -relief sunken -font $font(normal) -anchor center -background $color(bg) ]
pack $frm2.lblActive -fill x
set status(fileSize) [label $frm3.lblFileSize -width 10 -relief sunken -font $font(normal) -anchor w -background $color(bg)]
pack $frm3.lblFileSize -fill x
set status(encode) [label $frm5.lblFile -width 10 -relief sunken -font $font(normal) -anchor w -background $color(bg)]
pack $frm5.lblFile -fill x
set status(other) [label $frm7.lblOther -width 10 -relief sunken -font $font(normal) -anchor w -background $color(bg)]
pack $frm7.lblOther -fill x
#######
bind . <Control-n> {FileDialog new}
bind . <Control-ograve> {FileDialog new}
bind . <Control-o> {FileDialog open}
bind . <Control-ugrave> {FileDialog open}
$nbTree raise fileTree
############
$status(ovwrt) configure -text [::msgcat::mc "Insert"]
ReadToolBarFile $dir(gui) ;# system toolbars
ReadToolBarFile $dir(work_gui) ;# user toolbars
ReadHotKeysFile $dir(gui) ;# system hotkeys
ReadHotKeysFile $dir(work_gui) ;# users hotkeys
## FINDE EXTERNAL MODULES ##
FindModule

333
lib/modules/help.tcl Executable file
View File

@@ -0,0 +1,333 @@
#########################################################
# Tk LaTeX Editor
# Distributed under GNU Public License
# Author: Sergey Kalinin (BanZaj) banzaj@lrn.ru
# Copyright (c) "CONERO lab", 2002, http://conero.lrn.ru
#########################################################
proc ShowHelp {} {
if {[winfo exists .help] == 1} {
focus -force .help
raise .help
} else {
TopLevelHelp
}
if {[catch {set word [selection get]} error] != 0} {
set word " "
} else {
puts $word
TopLevelHelp
SearchWord $word
}
}
proc HlpTreeOneClick {node} {
global font(normal) hlpTree wordList hlpNoteBook findString dir(img) font
global lstSearch nodeParent
$hlpTree selection set $node
set nodeParent [$hlpTree parent $node]
set item [$hlpTree itemcget $node -data]
set file [string range $item 4 end]
#puts "$file" ;#debuf info
if {[string range $item 0 2] == "toc"} {
# $hlpTree configure
}
if {[$hlpTree itemcget $node -open] == 1} {
$hlpTree itemconfigure $node -open 0
} elseif {[$hlpTree itemcget $node -open] == 0} {
$hlpTree itemconfigure $node -open 1
}
if {[string range $item 0 2] == "doc"} {
GetContent $file
}
}
## GETTING TABLE OF CONTENT ##
proc GetTOC {} {
global dir hlpTree dir font lstSearch arr help locale
foreach dirHlp [lsort [glob -nocomplain [file join $dir(hlp) *]]] {
if {[file isdirectory $dirHlp] == 1} {
set dirHlp [file join $dir(hlp) $locale]
puts $dirHlp
} else {
set dirHlp $dir(hlp)
}
}
if {[info exists dirHlp] != 1} {set dirHlp $dir(hlp)}
puts $dirHlp
foreach file [lsort [glob -nocomplain [file join $dirHlp *toc.html]]] {
set fileName [file join $file]
set tocFile [open $fileName r]
fconfigure $tocFile -encoding binary
set dot "_"
set nodeParent [file dirname $fileName]
while {[gets $tocFile line]>=0} {
set a ""
set b ""
set line [encoding convertfrom $help(encode) $line]
if {[regexp -nocase "<title>.+\</title>" $line a]} {
if {[regexp ">.+\<" $line a]} {
set length [string length $a]
set title [string range $a 1 [expr $length-2]]
#puts $nodeParent ;# debug info
$hlpTree insert end root $nodeParent -text "$title" -font $font(normal) \
-data "toc_$nodeParent" -open 0\
-image [Bitmap::get [file join $dir(img) books.gif]]
}
} elseif {[regexp "\".+\"" $line a]} {
set data [string range $a 1 [expr [string last "\"" $a]-1]]
if {[regexp ">.+\<" $line b]} {
set line [string range $b 1 [expr [string first "<" $b]-1]]
regsub -all {[ :]} $line "_" subNode
#regsub -all ":" $ubNode "_" node
set subNode "$nodeParent$dot$subNode"
if {[info exists arr($subNode)] == 0} {
set arr($subNode) [file join $dirHlp $data]
}
set data [file join $dirHlp $data]
#puts "$subNode" ;# debug info
$hlpTree insert end "$nodeParent" $subNode -text "$line"\
-font $font(normal) -data "doc_$data" -open 0\
-image [Bitmap::get [file join $dir(img) file.gif]]
$lstSearch insert end $line
}
} else {
break
}
}
}
$hlpTree configure -redraw 1
}
proc SearchWord {word} {
global arr nBookTree
set word [string tolower [string trim $word]]
puts $word
$nBookTree raise hlpSearch
# InsertEnt .help.frmBody.frmCat.nBookTree.fhlpSearch.frmScrhEnt.entSearch $word
foreach wrd [array names arr] {
set name "[file rootname [file tail $arr($wrd)]]"
set file "$arr($wrd)"
if {[string match "$word*" [string tolower $name]] == 1} {
GetContent $file
}
}
}
## GETTING CONTENT FROM FILES ##
proc GetContent {file} {
global dir hlpNoteBook font help
$hlpNoteBook raise [$hlpNoteBook page 0]
set node [$hlpNoteBook raise]
if {$node != ""} {
$hlpNoteBook delete hlpHTML
}
set nbTitle ""
set html ""
set file [open $file r]
fconfigure $file -encoding binary
while {[gets $file line]>=0} {
# if {$line == ""} {
# set html "<h1><3E><><EFBFBD><EFBFBD> $file <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD></h1>"
# }
set line [encoding convertfrom $help(encode) $line]
if {[regexp -nocase "<title>.+\</title>" $line a]} {
if {[regexp ">.+\<" $a a]} {
set length [string length $a]
set nbTitle [string range $a 1 [expr $length-2]]
#puts $nbTitle
#puts $a
}
}
append html $line
}
set frmHTML [$hlpNoteBook insert end hlpHTML -text $nbTitle]
set txt [text $frmHTML.txtHTML -yscrollcommand "$frmHTML.yscroll set" \
-relief sunken -wrap word -highlightthickness 0 -font $font(normal)\
-selectborderwidth 0 -selectbackground #55c4d1 -width 10]
scrollbar $frmHTML.yscroll -relief sunken -borderwidth {1} -width {10} -takefocus 0\
-command "$frmHTML.txtHTML yview"
pack $txt -side left -fill both -expand true
pack $frmHTML.yscroll -side left -fill y
$hlpNoteBook raise hlpHTML
focus -force $txt
HMinit_win $txt
#HMlink_callback LinkCallback
HMset_state $txt -size 0
HMset_indent $txt 1.2
HMparse_html $html "HMrender $txt"
#HM::tag_title .help "Help - $nbTitle"
$txt configure -state disabled
}
## GOTO URL PROCEDURE ##
proc LinkCallback {w url} {
global dir nodeParent
set url "[file join $dir(hlp) $nodeParent $url]"
if {[catch {open $url r} oHTML]} {
tk_messageBox -title "[::msgcat::mc "Error open URL"]"\
-message "[::msgcat::mc "Can't found file:"] $url"\
-icon error -type ok
} else {
GetContent $url
}
}
## autor DEDERER ##
proc LinkCallback_ {w url} {
global dir
set url "[file join $dir(hlp) $url]"
if {[catch {open $url r} oHTML]} {
tk_messageBox -title "[::msgcat::mc "Error open URL"]"\
-message "[::msgcat::mc "Can't founf file: $url"]"\
-icon error -type ok
} else {
set html [read $oHTML]
$w configure -state normal
HMreset_win $w
HMparse_html $html "HMrender $w"
$w configure -state disable
}
#HMrender [winfo toplevel $w] $url
}
## MAIN HELP WINDOW ##
proc TopLevelHelp {} {
global font hlpTree hlpNoteBook nBookTree homeDir dir lstSearch w frmSrchList
set w .help
set w_exist [winfo exists $w]
if !$w_exist {
toplevel $w
# wm resizable .help 0 0
wm geometry $w 600x400+0+0
wm title $w [::msgcat::mc "Help"]
# wm protocol $w WM_DELETE_WINDOW {destroy .msg .help}
#wm geometry . 600x400+0+0
wm title $w [::msgcat::mc "Help"]
frame $w.frmMenu -border 1 -relief raised
frame $w.frmTool -border 1 -relief raised
frame $w.frmBody -border 1 -relief raised
frame $w.frmStatus -border 1 -relief sunken
pack $w.frmMenu -side top -padx 1 -fill x
pack $w.frmTool -side top -padx 1 -fill x
pack $w.frmBody -side top -padx 1 -fill both -expand true
pack $w.frmStatus -side top -padx 1 -fill x
button $w.frmTool.btnBack -relief groove -font $font(bold) -command Back -state disable
button $w.frmTool.btnForward -relief groove -font $font(bold) -command Forward -state disable
button $w.frmTool.btnRefresh -relief groove -font $font(bold) -command Refresh -state disable
button $w.frmTool.btnPrint -relief groove -font $font(bold) -command Print -state disable
image create photo imgBack -format gif -file [file join $dir(img) back.gif]
image create photo imgForward -format gif -file [file join $dir(img) forward.gif]
image create photo imgRefresh -format gif -file [file join $dir(img) refresh.gif]
image create photo imgPrint -format gif -file [file join $dir(img) printer.gif]
$w.frmTool.btnBack configure -image imgBack
$w.frmTool.btnForward configure -image imgForward
$w.frmTool.btnRefresh configure -image imgRefresh
$w.frmTool.btnPrint configure -image imgPrint
pack $w.frmTool.btnBack $w.frmTool.btnForward $w.frmTool.btnRefresh $w.frmTool.btnPrint\
-side left -fill x
set frmCat [frame $w.frmBody.frmCat -border 1 -relief sunken]
pack $frmCat -side left -fill y
set frmWork [frame $w.frmBody.frmWork -border 1 -relief sunken]
pack $frmWork -side left -fill both -expand true
set nBookTree [NoteBook $frmCat.nBookTree -font $font(normal)]
pack $nBookTree -fill both -expand true -padx 2 -pady 2
set frmTreeNb [$nBookTree insert end hlpTree -text "[::msgcat::mc "Contents"]"]
set frmSearch [$nBookTree insert end hlpSearch -text "[::msgcat::mc "Search"]"]
$nBookTree raise hlpTree
set frmScrlX [frame $frmTreeNb.frmScrlX -border 0 -relief sunken]
set frmTree [frame $frmTreeNb.frmTree -border 1 -relief sunken]
set hlpTree [Tree $frmTree.tree \
-relief sunken -borderwidth 1 -width 20 -highlightthickness 0\
-redraw 0 -dropenabled 1 -dragenabled 1 -dragevent 3 \
-yscrollcommand {.help.frmBody.frmCat.nBookTree.fhlpTree.frmTree.scrlY set} \
-xscrollcommand {.help.frmBody.frmCat.nBookTree.fhlpTree.frmScrlX.scrlX set} \
-background "#d3d3d3" -selectbackground "#55c4d1" \
-droptypes {
TREE_NODE {copy {} move {} link {}}
LISTBOX_ITEM {copy {} move {} link {}}
} -opencmd "" -closecmd ""]
pack $frmTree -side top -fill y -expand true
pack $frmScrlX -side top -fill x
scrollbar $frmTree.scrlY -command {$hlpTree yview} \
-borderwidth {1} -width {10} -takefocus 0
pack $hlpTree $frmTree.scrlY -side left -fill y
scrollbar $frmScrlX.scrlX -command {$hlpTree xview} \
-orient horizontal -borderwidth {1} -width {10} -takefocus 0
pack $frmScrlX.scrlX -fill x -expand true
set frmSrchList [frame $frmSearch.frmScrhList -border 0 -relief sunken]
set frmSrchEnt [frame $frmSearch.frmScrhEnt -border 0 -relief sunken]
set frmSrchScrollX [frame $frmSearch.frmScrhScrollX -border 0 -relief sunken]
pack $frmSrchEnt -side top -fill x
pack $frmSrchList -side top -fill both -expand true
pack $frmSrchScrollX -side top -fill x
entry $frmSrchEnt.entSearch
set lstSearch [listbox $frmSrchList.lstSearch -font $font(normal)\
-yscrollcommand\
{.help.frmBody.frmCat.nBookTree.fhlpSearch.frmScrhList.scrListY set}\
-xscrollcommand\
{.help.frmBody.frmCat.nBookTree.fhlpSearch.frmScrhScrollX.scrListX set}\
-selectmode single -selectbackground #55c4d1\
-selectborderwidth 0]
scrollbar $frmSrchList.scrListY -command\
{$frmSrchList.lstSearch yview} -borderwidth {1} -width {10} -takefocus 0
pack $frmSrchEnt.entSearch -side top -fill x -expand true
pack $frmSrchList.lstSearch -side left -fill both -expand true
pack $frmSrchList.scrListY -side left -fill y
scrollbar $frmSrchScrollX.scrListX -orient horizontal -command\
{$frmSrchList.lstSearch xview} -borderwidth {1} -width {10} -takefocus 0
pack $frmSrchScrollX.scrListX -fill x
# $hlpTree bindText <ButtonRelease-4> [puts %k]
# $hlpTree bindText <ButtonRelease-3> [puts %k]
# bind $frmTree <ButtonPress-4> {$frmSrchList.lstSearch xview}
# $hlpTree bindText <Double-ButtonPress-1> "HlpTreeDoubleClick [$hlpTree selection get]"
# $hlpTree bindImage <Double-ButtonPress-1> "HlpTreeDoubleClick [$hlpTree selection get]"
$hlpTree bindText <ButtonPress-1> "HlpTreeOneClick [$hlpTree selection get]"
$hlpTree bindImage <ButtonPress-1> "HlpTreeOneClick [$hlpTree selection get]"
bind .help <Escape> "destroy .help"
# bind $frmSrchEnt.entSearch <KeyRelease>\
# {SearchWord [Text .help.frmBody.frmCat.nBookTree.fhlpSearch.frmScrhEnt.entSearch]}
#bind $w <Escape> exit
#bind $frmTree <Down> {TreeClick [$hlpTree selection get]}
#bind $frmTree <Up> {TreeClick [$hlpTree selection get]}
#bind $frmTree <Return> {TreeClick [$hlpTree selection get]}
bind $frmTree.tree.c <Button-4> "$hlpTree yview scroll -3 units"
bind $frmTree.tree.c <Button-5> "$hlpTree yview scroll 3 units"
bind $frmTree.tree.c <Shift-Button-4> "$hlpTree xview scroll -2 units"
bind $frmTree.tree.c <Shift-Button-5> "$hlpTree xview scroll 2 units"
set hlpNoteBook [NoteBook $frmWork.hlpNoteBook -font $font(normal)]
pack $hlpNoteBook -fill both -expand true -padx 2 -pady 2
GetTOC
}
}
##################################################
#TopLevelHelp
#GetTOC
#GetContent $dir(hlp)/tcl.toc.html

61
lib/modules/hotkeys.tcl Executable file
View File

@@ -0,0 +1,61 @@
######################################################
# Tk LaTeX Editor
# Distributed under GNU Public License
# Author: Sergey Kalinin (aka BanZaj) banzaj@lrn.ru
# Copyright (c) "CONERO lab", 2004, http://conero.lrn.ru
######################################################
proc ReadHotKeysFile {_dir} {
global dir
foreach file [lsort [glob -nocomplain [file join $_dir hotkeys *]]] {
puts "Found hotkeys file - \'$file\'"
ReadHotKeys $file
}
}
set mnum 0
proc ReadHotKeys {file} {
global dir font mnum
set menu_root ".frmMenu.mnuEdit.m.hotkeys"
set menu $menu_root
puts "Read HotKeys settings from \'$file\'"
set fHandle [open $file]
while {[gets $fHandle line]>=0} {
set line [string trim $line]
set kw [string range $line 0 [expr [string first " " $line]-1]]
set l [string range $line [expr [string first " " $line] +1] end]
if {$l == "Separator"} {
CreateSeparator $frame
}
if {$kw == "menu"} {
if [regexp -- {(.*?) (\".*?\")} $l m img hint] {
$menu_root add cascade -label $hint -menu $menu.m_$mnum -font $font(normal)
set menu [menu $menu.m_$mnum]
incr mnum
}
}
if {$kw == "cmd"} {
if [regexp -- {(\".*?\") (\".*?\") (\".*?\")} $l m cmd hint keys] {
InsertCommand $menu $cmd $hint "" $keys
} elseif [regexp -- {(\".*?\") (\".*?\")} $l m cmd hint] {
InsertCommand $menu $cmd $hint "" ""
}
if [regexp -- {separator} $l m] {
InsertSeparator $menu
}
}
if {$kw == "imagecmd"} {
if [regexp -- {(\".*?\") (\".*?\") (.*?)\.gif} $l m cmd hint im] {
InsertCommand $menu $cmd $hint $im ""
}
if [regexp -- {(\".*?\") (\".*?\") (.*?)\.gif (\".*?\")} $l m cmd hint im keys] {
InsertCommand $menu $cmd $hint $im $keys
}
}
}
close $fHandle
}

1485
lib/modules/htmllib.tcl Executable file

File diff suppressed because it is too large Load Diff

459
lib/modules/htmltable.tcl Executable file
View File

@@ -0,0 +1,459 @@
set HMtable(unique) 0
set HMtable(level) 0
;# RCSID: $Header: /home/clif.clif/CVS_ROOT/TclXexample/htmltable.tcl,v 1.6 1999/02/01 05:00:18 clif Exp $
proc HMTBL_insert_FromMap { win text id } {
global HMtag_map HMinsert_map HMlist_elements HMtable
upvar #0 HM$win var
# insert white space (with current font)
# adding white space can get a bit tricky. This isn't quite right
set bad [catch {$win insert $var(S_insert) $HMinsert_map($id) "space $var(font)"}]
if {!$bad && [lindex $var(fill) end]} {
set text [string trimleft $text]
}
if {[info exists HMinsert_map($id)] && [string match $HMinsert_map($id) "\n"]} {
$win insert $var(S_insert) "\t"
for {set i 0} {$i < $HMtable(column)} {incr i} {
$win insert $var(S_insert) "\t"
}
}
}
################################################################
# proc HMtag_table {win param text}--
# Process the &lt;TABLE&gt; tag - Called from html_library
# Creates a new text widget to hold the table
# Creates HM.WindowName state variables with default values
# Sets HM.win(divert) to point to the new window so that
# all text being processed is directed to the table text widget.
#
# Arguments
# win The window that will hold everything
# param Any parameters in the <TABLE ...> tag
# text The name of a variable with associated text
# Results
#
#
proc HMtag_table {win param text} {
global HMtable
upvar #0 HM$win var
# This tracks the level of tables being rendered -
# When it returns to 0, we can reset the HM_insert_FromMap to the
# original value.
if {$HMtable(level) == 0} {
rename HMinsert_FromMap HM_ORIG_insert_FromMap
rename HMTBL_insert_FromMap HMinsert_FromMap
}
incr HMtable(level)
# Define a unique name for the text widget
# that will contain this table
set newTable .txt_$HMtable(unique)
# Divert output to the new window.
set var(divert) $newTable
# Make a new global state variable for the new text widget
upvar #0 HM$newTable newvar
# and initialize it
HMinit_state $newTable
set newvar(family) times
set newvar(size) 12
set newvar(weight) normal
set newvar(style) roman
set newvar(indent) 0
set newvar(stop) 0
set newvar(S_insert) end
set newvar(oldWindow) $win
# Create the new text widget
update; update idle;
# puts "PARENT: ($win) [expr [$win cget -width] -2]"
# puts "PARENT: ($win) [expr [$win cget -insertwidth] -2]"
# puts "PARENT: ($win) [winfo width $win] "
# puts "GRID: [wm grid .]"
set curFont [HMx_font times $newvar(size) medium r]
# puts "curFont: $curFont"
text $newTable -width [expr [$win cget -width] -2] -background white \
-font $curFont -wrap none
# puts "TEXT GRID: [catch {wm grid $newTable} xx]"
# puts "$xx"
# puts "TEXT: ($newTable) [winfo width $newTable] "
# Set the row and column descriptors.
set HMtable(row) 0
set HMtable(column) 0
set HMtable(maxCol) 0
# increment the unique number pointer so that the next table will
# get a new text widget name.
incr HMtable(unique)
}
################################################################
# proc HMtag_/table {win param text}--
# Process the </TABLE> tag
# This procedure resets the window to receive text to the master
# window.
# Arguments
#
# table The window that holds the table
# param Any parameters in the </TABLE ...> tag
# text The name of a variable with associated text
#
# Results
# Maps the new window into the master text window.
# Sets tab locations in new window
#
proc HMtag_/table {table param text} {
global HMtable errorInfo
# Set the var pointer for the table text widget
upvar #0 HM$table varTbl
# This tracks the level of tables being rendered -
# When it returns to 0, we can reset the HM_insert_FromMap to the
# original value.
incr HMtable(level) -1
if {$HMtable(level) == 0} {
rename HMinsert_FromMap HMTBL_insert_FromMap
rename HM_ORIG_insert_FromMap HMinsert_FromMap
}
incr HMtable(level)
# Set the win and var variables to point to the master text widget,
# instead of the table text widget.
set win $varTbl(oldWindow)
upvar #0 HM$win var
# unset var(divert) so that text will no longer be diverted to
# the table window
unset var(divert)
# Get the list of tags - to make the loop faster
set alltags [$table tag names]
set maxFont 10;
foreach tag $alltags {
if {[string first "font:" $tag] == 0} {
set fontlst [split $tag ":"]
set size [lindex $fontlst 2]
set family [lindex $fontlst 1]
if {($size >= $maxFont) && ([string match $family "courier"])} {
set maxFont $size
set maxFamily $family
set txtfont [list [lindex $fontlst 1] [lindex $fontlst 2] [lindex $fontlst 3]]
}
}
}
;# set f [catch {eval HMx_font $txtfont} rslt]
;# puts "F: $f rslt: $rslt"
;# puts "Plus scaling: [eval HMx_font $txtfont]"
set txtfont [eval HMx_font $txtfont];
set maxFont [lindex $txtfont 1]
# puts "txtfont: $txtfont maxFont: $maxFont xfont: $var(xfont) $varTbl(xfont)"
# puts "[$table dump 1.0 20.0]"
# Reset the height of the table text widget to match the number of
# rows actually used and insert it into the master text widget
set numrow [lindex [split [$table index end] .] 0]
$table configure -height [expr 1 + $numrow] -font $txtfont
$win window create $var(S_insert) -window $table
update; update idle;
# puts "[$table dump 0.0 end]"
# puts "INDEX: [$table index end]"
set parentPixelWidth [winfo width $win]
set tablePixelWidth [winfo width $table]
set tableCharWidth [$table cget -width]
incr tableCharWidth -1
$table configure -width $tableCharWidth
update; update idle;
set tablePixelWidth2 [winfo width $table]
set charPixelWidth [expr $tablePixelWidth - $tablePixelWidth2]
# Now, I know the width of a char in this font window, calc
# how many chars wide to match the parent
set newCharWidth [expr $parentPixelWidth/$charPixelWidth -2]
$table configure -width $newCharWidth
# Make a simple little ruler for debugging help.
# canvas .c932 -height 30 -width $tablePixelWidth -background yellow
# for {set i 0} {$i < $tablePixelWidth} {incr i 50} {
# if {($i % 100) == 50} {
# .c932 create line $i 0 $i 15 -fill green
# } else {
# .c932 create line $i 0 $i 30 -fill blue
# }
# }
# $table window create 2.0 -window .c932
# while {$tablePixelWidth > $parentPixelWidth} {
# incr charWidth -1
# # puts "$tablePixelWidth $parentPixelWidth $charWidth"
# $table configure -width $charWidth
# set tablePixelWidth [winfo width $table]
# update; update idle;
# }
# Clear out the bogus newlines
# for {set i 0} {$i <= $HMtable(row)} {incr i} {
# for {set j 0} {$j < $HMtable(maxCol)} {incr j} {
#
# # A cell may be blank. Check for a tag before proceeding
#
# if {[lsearch $alltags tbl.$i.$j] != -1} {
# set range [$table tag ranges tbl.$i.$j]
# # Delete the trailing \n that was added by html_lib.tcl.
# $table delete "[lindex $range 0] lineend"
# }
# }
# }
# Find the longest string in each column to set the column width.
# Initialize the sizes for the columns to 0
for {set j 0} {$j < $HMtable(maxCol)} {incr j} {
set colSize($j) 0;
}
set curCol 0;
# Go through the dump of the text widget looking for text, and font
# and table entry tags.
# We track the current font and table cell so that when text comes in
# we can calculate the size in the current font, and compare that to
# the previous largest size.
foreach {id data index} [$table dump 0.0 end] {
switch $id {
"tagon" {
switch -glob -- $data {
"font:*" {
set lst [split $data ":"]
set txtfont [list [lindex $lst 1] [lindex $lst 2] [lindex $lst 3]]
set txtfont [eval HMx_font $txtfont];
}
"tbl.*" {
set lst [split $data "."]
set curCol [lindex $lst 2]
}
}
}
"text" {
set line [string trim $data]
# Adding a few extra chars seems to take care of
# some slack where it appears that htmllib is
# adding some unexpected spaces
set line "--$line"
set len [font measure $txtfont $line ]
if {$len > $colSize($curCol) } {
set colSize($curCol) $len
}
}
}
}
# for {set j 0} {$j < $HMtable(maxCol)} {incr j} {
# puts "$j: $colSize($j)"
# }
# Define the tab stops to the maximum
# size for each column.
#
# The pad value of 8 is to separate the columns
#
# If the toplevel window is gridded, divide the
# tab position by the grid width
#
set gridWidth [lindex [wm grid .] 2]
set gridWidth [lindex [wm grid .] 2]
if {$gridWidth == ""} {set gridWidth 1}
set tabStops 0;
set totl 0;
for {set i 0; set j 1} {$j < $HMtable(maxCol)} {incr j; incr i} {
set wid [expr ($colSize($i) + 8)/$gridWidth]
lappend tabStops [expr $wid + $totl]
incr totl $wid
}
# and set the tab stops.
$table configure -tabs $tabStops
# Wipe the first character - a bare (and useless) newline.
$table delete 1.0
# foreach {o t th} [$table dump 0.0 end] { puts [format "%8s %7s .%-50s." $o $th $t]}
# foreach {o t th} [$win dump 0.0 3.0] { puts "$o $t $th"}
}
################################################################
# proc HMtag_tr {win param text}--
# Process the <TR> tag
# This begins a new row by setting the row and column values.
# Arguments
#
# win The window that holds the table
# param Any parameters in the </TR ...> tag
# text The name of a variable with associated text
#
# Results
# Increments the row position.
# Sets the column to 0.
#
proc HMtag_tr {win param text} {
global HMtable
incr HMtable(row)
set HMtable(column) 0
}
################################################################
# proc HMtag_td {win param text}--
# Process the <TD> tag
# Arguments
#
# win The window that holds the table
# param Any parameters in the <TD ...> tag
# text The name of a variable with associated text
#
# Results
# Sets a tag for the start of this table entry to be used to
# set tab positions
#
proc HMtag_td {win param text} {
global HMtable
upvar $text t
set t "\t[string trim $t]"
upvar #0 HM$win var
set var(Ttab) tbl.$HMtable(row).$HMtable(column)
}
################################################################
# proc HMtag_/td {win param text}--
#
# Arguments
#
# win The window that holds the table
# param Any parameters in the </TD ...> tag
# text The name of a variable with associated text
#
# Results
# Increments the column position.
# If there are more columns in this table row than in previous
# rows, set the max column
proc HMtag_/td {win param text} {
global HMtable
upvar $text t
set t "[string trim $t]"
incr HMtable(column)
if {$HMtable(column) > $HMtable(maxCol)} {
set HMtable(maxCol) $HMtable(column)
}
}
################################################################
# proc HMlink_callback {win href}--
# This proc is called by the html_library code to parse a
# hypertext reference.
#
# Arguments
# win The text window that is used by the html_library to
# display the text
# href A hypertext reference to use for the next hypertext.
#
# Results
# This example simply replaces the contents of the display with
# hardcoded new text.
proc HMlink_callback {win href} {
global newHTMLtxt
puts "HMlink_callback was invoked with WIN: $win HREF: $href"
# Clear the old contents from the window.
HMreset_win $win
# Display the new text.
HMparse_html $newHTMLtxt "HMrender $win"
}
################################################################
# proc HMset_image {win handle src}--
# Acquire image data, create a Tcl image object,
# and return the image handle.
#
# Arguments
# win The text window in which the html is rendered.
# handle A handle to return to the html library with the image handle
# src The description of the image from: <IMG src=XX>
#
# Results
# This example creates a hardcoded image. and then invokes
# HMgot_image with the handle for that image.
proc HMset_image {win handle src} {
global logo
puts "HMset_image was invoked with WIN: $win HANDLE: $handle SRC: $src"
# In a real application this would parse the src, and load the
# appropriate image data.
set img [image create photo -data $logo]
HMgot_image $handle $img
return ""
}

60
lib/modules/imgviewer.tcl Executable file
View File

@@ -0,0 +1,60 @@
package require Img
proc ImageViewer {f w node} {
global tab_label noteBook factor im1 im2
set factor($node) 1.0
frame $w.f
pack $w.f -side left -fill both -expand true
canvas $w.f.c -xscrollcommand "$w.f.x set" -yscrollcommand "$w.y set"
scrollbar $w.f.x -ori hori -command "$w.f.c xview"
scrollbar $w.y -ori vert -command "$w.f.c yview"
pack $w.f.c -side top -fill both -expand true
pack $w.f.x -side top -fill x
pack $w.y -side left -fill y
bind $w.f.c <Button-4> "%W yview scroll -3 units"
bind $w.f.c <Button-5> "%W yview scroll 3 units"
bind $w.f.c <Shift-Button-4> "%W xview scroll -2 units"
bind $w.f.c <Shift-Button-5> "%W xview scroll 2 units"
bind $w.f.c <Control-Button-4> "scale $w.f.c 0.5 $node"
bind $w.f.c <Control-Button-5> "scale $w.f.c 2 $node"
#$w.scrwin setwidget $w.scrwin.f
openImg $f $w.f.c $node
set tab_label [$noteBook itemcget $node -text]
balloon $w.f.c set "Mouse wheel up/down - verti<EFBFBD>al scrolling the image\n\
Shift + mouse wheel up/down - horizontal image scrolling\n\
Control + mouse wheel up/down is a scale image -/+"
}
proc openImg {fn w node} {
global im1
set im1 [image create photo -file $fn]
#scale $w
list [file size $fn] bytes, [image width $im1]x[image height $im1]
$w create image 1 1 -image $im1 -anchor nw -tag img
}
proc scale {w {n 1} node} {
global im1 im2 factor noteBook tab_label
set factor($node) [expr {$factor($node) * $n}]
$w delete img
catch {image delete $im2}
set im2 [image create photo]
if {$factor($node)>=1} {
set f [expr int($factor($node))]
$im2 copy $im1 -zoom $f $f
} else {
set f [expr round(1./$factor($node))]
$im2 copy $im1 -subsample $f $f
}
$w create image 1 1 -image $im2 -anchor nw -tag img
$noteBook itemconfigure $node -text "$tab_label (size x$factor($node))"
$w config -scrollregion [$w bbox all]
}

74
lib/modules/latex2html.tcl Executable file
View File

@@ -0,0 +1,74 @@
######################################################
# Tk LaTeX Editor
# Distributed under GNU Public License
# Author: Sergey Kalinin (BanZaj) banzaj@lrn.ru
# Copyright (c) "CONERO lab", 2002, http://conero.lrn.ru
######################################################
proc Latex2Html {} {
global tree module cmdString
set selFiles [$tree selection get]
if {[llength $selFiles] == 0} {
set answer [tk_messageBox\
-message "[::msgcat::mc "Don't selected file"]"\
-type ok -icon warning\
-title [::msgcat::mc "Warning"]]
case $answer {
ok {return 0}
}
}
if {[llength $selFiles] == 1} {
if {$selFiles != ""} {
set file [$tree itemcget $selFiles -data]
}
CommandStringDialog $file
}
#puts $command
}
proc CommandStringDialog {file} {
global nb files font color cmdString module
set w .cmd
# destroy the find window if it already exists
if {[winfo exists $w]} {
destroy $w
}
toplevel $w
wm title $w [::msgcat::mc "Command options"]
wm resizable $w 0 0
wm transient $w .
frame $w.frmCombo -borderwidth 1 -background $color(bg)
frame $w.frmBtn -borderwidth 1 -background $color(bg)
pack $w.frmCombo $w.frmBtn -side top -fill x
# set combo [entry $w.frmCombo.entFind]
label $w.frmCombo.lblModule -text $module(latex2html) -background $color(bg)
set combo [entry $w.frmCombo.txtString]
pack $w.frmCombo.lblModule $combo -fill x -padx 2 -pady 2 -side top
button $w.frmBtn.btnFind -text [::msgcat::mc "Run"]\
-font $font(normal) -width 12 -relief groove -background $color(bg)\
-command {
RunConverter [.cmd.frmCombo.txtString get]
}
button $w.frmBtn.btnCancel -text [::msgcat::mc "Close"]\
-relief groove -width 12 -font $font(normal) -background $color(bg)\
-command "destroy $w"
pack $w.frmBtn.btnFind $w.frmBtn.btnCancel -fill x -padx 2 -pady 2 -side left
bind $w <Return> {RunConverter [.cmd.frmCombo.txtString get]}
bind $w <Escape> "destroy $w"
$combo insert end "-no_navigation -split 0 $file"
focus -force $combo
}
proc RunConverter {string} {
global module
destroy .cmd
set pipe [open "|$module(latex2html) $string" "r"]
fileevent $pipe readable [list EndProc latex2html $pipe]
fconfigure $pipe -buffering none -blocking no
}

79
lib/modules/make.tcl Executable file
View File

@@ -0,0 +1,79 @@
#########################################################
# TkTeXEditor
# Distributed under GNU Public License
# Author: Sergey Kalinin (BanZaj) banzaj@lrn.ru
# Copyright (c) "CONERO lab", 2002, http://conero.lrn.ru
#########################################################
## INSERT DEBUG INFORMATION INTO TEXT WIDGET ##
proc DebugInfo {widget file folder} {
global font nb w errLine activeFile
set w $widget
$widget configure -state normal
if {[winfo depth $nb] > 1} {
set bold "-background blue -foreground white -relief raised -borderwidth 1"
set normal "-background {} -foreground blue -relief flat"
} else {
set bold "-foreground white -background black"
set normal "-foreground {} -background {}"
}
$widget tag configure error -font $font(bold) -foreground red
$widget tag configure erName -font $font(bold) -foreground blue
$widget tag bind erName <Any-Enter> "$widget tag configure erName $bold; $widget configure -cursor hand2"
$widget tag bind erName <Any-Leave> "$widget tag configure erName $normal; $widget configure -cursor xterm"
if {[eof $file]} {
catch {close $file} msg
if {$msg != ""} {
# puts $msg
$widget insert end "[::msgcat::mc "Program failed"]: $msg\n";
} else {
# puts $msg
$widget insert end "\n-----------------------------------------------\n"
$widget insert end "[::msgcat::mc "Program finished successfully"]\n"
TempFilesDel $folder
}
} else {
set line [read $file]
set index [string first "!" $line]
$widget insert end $line
set pos [$widget index insert]
set lineNumber [lindex [split $pos "."] 0]
if {$index != -1} {
set p [$widget search -backward -- "!" $pos 0.0]
set l [lindex [split $p "."] 0]
set c [lindex [split $p "."] 1]
$widget tag add error $l.0 $l.end
set errLine [expr $l + 1]
$widget tag add erName $errLine.0 $errLine.end
$widget tag bind erName <ButtonPress-1> {ErrorFind}
}
}
$widget see end
$widget configure -state disabled
}
## FIND COMPILE ERROR INTO TEXT BUFFER ##
proc ErrorFind {} {
global font nb w errLine activeFile
set word [$w get $errLine.0 $errLine.end]
set error [string range $word 2 [string first " " $word]]
set text "$nb.f$activeFile.f.text"
focus -force $text
$text mark set insert [string trim $error].0
$text see insert
}
## DELETE TEMPORARY FILES ##
proc TempFilesDel {folder} {
foreach ext {log bak tmp} {
foreach file [lsort [glob -nocomplain [file join $folder *.$ext]]] {
file delete -- $file
}
}
}

144
lib/modules/module.tcl Executable file
View File

@@ -0,0 +1,144 @@
#########################################################
# Tk LaTeX Editor
# Distributed under GNU Public License
# Author: Sergey Kalinin (BanZaj) banzaj@lrn.ru
# Copyright (c) "CONERO lab", 2002, http://conero.lrn.ru
#########################################################
proc FindModule {} {
global module dir font tcl_platform color preview_cmd convert_cmd
set menu [menu .frmMenu.mnuModule.m -background $color(bg)]
set moduleName ""
foreach m {tkcvs tkdiff dvi ps pdf html} {
if [info exists convert_cmd($m)] {
scan $convert_cmd($m) "%s" moduleName
FindExtMod_ convert_$m $moduleName
}
if [info exists preview_cmd($m)] {
scan $preview_cmd($m) "%s" moduleName
FindExtMod_ preview_$m $moduleName
} else {
FindExtMod $m $m
}
}
}
## Find external programms ##
proc FindExtMod {m cmd} {
global module dir font tcl_platform color preview_cmd convert_cmd
if {$tcl_platform(platform) == "unix"} {
set string [exec whereis $cmd]
scan $string "%s%s" v module($m)
if {[info exists module($m)] && [file isdirectory $module($m)] == 0} {
puts "Find external programm $module($m)"
.frmMenu.mnuModule.m add command -label [::msgcat::mc "$m"] -command "DoModule $m" \
-font $font(normal)
} else {
set module($m) ""
}
} elseif {$tcl_platform(platform) == "mac"} {
set module($m) $cmd
} elseif {$tcl_platform(platform) == "windows"} {
set module($m) $cmd
}
}
proc FindExtMod_ {m cmd} {
global module dir font tcl_platform color preview_cmd convert_cmd
if {$tcl_platform(platform) == "unix"} {
set string [exec whereis $cmd]
scan $string "%s%s" v module($m)
if {[info exists module($m)] && [file isdirectory $module($m)] == 0} {
puts "Find external programm $module($m)"
} else {
set module($m) ""
}
} elseif {$tcl_platform(platform) == "mac"} {
set module($m) $cmd
} elseif {$tcl_platform(platform) == "windows"} {
set module($m) $cmd
}
}
## RUNNING MODULE ##
proc DoModule {mod} {
global tcl_platform
global module dir tree
case $mod {
tkcvs {
set pipe [open "|$module(tkcvs) -dir $dir(doc)" "r"]
fileevent $pipe readable
fconfigure $pipe -buffering none -blocking no
}
tkdiff {
set selFiles [$tree selection get]
if {[llength $selFiles] == 0} {
set answer [tk_messageBox\
-message "[::msgcat::mc "Don't selected file"]"\
-type ok -icon warning\
-title [::msgcat::mc "Warning"]]
case $answer {
ok {return 0}
}
}
if {[llength $selFiles] == 1} {
if {$selFiles != ""} {
set file1 [$tree itemcget $selFiles -data]
}
set command "-r $file1"
}
if {[llength $selFiles] == 2} {
if {[lindex $selFiles 0] != ""} {
set file1 [$tree itemcget [lindex $selFiles 0] -data]
}
if {[lindex $selFiles 1] != ""} {
set file2 [$tree itemcget [lindex $selFiles 1] -data]
}
set command "$file1 $file2"
}
if {[llength $selFiles] > 2} {
set answer [tk_messageBox\
-message "[::msgcat::mc "Must be one or two file select!"]"\
-type ok -icon info\
-title [::msgcat::mc "Warning"]]
case $answer {
ok {return 0}
}
}
set pipe [open "|$module(tkdiff) $command" "r"]
fileevent $pipe readable
fconfigure $pipe -buffering none -blocking no
}
}
}
proc EndProc {module file} {
if {[eof $file]} {
catch [close $file] msg
if {$msg != ""} {
puts $msg
Message "$module\n [::msgcat::mc "Program failed"]: $msg\n";
} else {
Message "$module\n [::msgcat::mc "Program finished successfully"]\n"
}
} else {
read $file
}
}
proc Message {message} {
global font
set answer [MessageDlg .msg -parent .\
-message "$message"\
-type ok -icon warning\
-font $font(normal)\
-title [::msgcat::mc "Warning"]]
case $answer {
ok {return 0}
}
}

72
lib/modules/package.tcl Executable file
View File

@@ -0,0 +1,72 @@
######################################################
# TkTeXEditor
# Distributed under GNU Public License
# Author: Sergey Kalinin (BanZaj) banzaj@lrn.ru
# Copyright (c) "CONERO lab", 2002, http://conero.lrn.ru
######################################################
proc GetPackage {_dir} {
global nb dir cmd
foreach file [lsort [glob -nocomplain [file join $_dir *.lst]]] {
puts "Load commands from $file"
set pkgName [file rootname [file tail $file]]
set cmd($pkgName) ""
#set cmd(all) ""
set f [open $file r]
while {[gets $f line] >= 0} {
if {[string range $line 0 0] != "#"} {
if [info exists cmd($pkgName)] {
lappend cmd($pkgName) $line
lappend cmd(all) $line
} else {
set cmd($pkgName) [list $line]
set cmd(all) [list $line]
}
}
}
close $f
}
puts "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - [llength $cmd(all)]" ;# debug info
}
proc PackageDialog {} {
global nb font dir color
set w .frmBody.packages
# destroy the find window if it already exists
if {[winfo exists $w]} {
destroy $w
}
toplevel $w
wm title $w [::msgcat::mc "Pakages"]
wm resizable $w 0 0
#wm transient .
label $w.text -text [::msgcat::mc "Included packages"] -font $font(bold)\
-relief groove -border 1
frame $w.frmPkg -relief groove -border 1 -background $color(bg)
frame $w.frmBtn -background $color(bg)
pack $w.text -side top -anchor nw -fill x
pack $w.frmPkg -side top -fill both -expand 1
pack $w.frmBtn -side top -fill x
foreach pkg [GetPackage] {
checkbutton $w.frmPkg.chk_$pkg -text $pkg -font $font(normal) -background $color(bg)
pack $w.frmPkg.chk_$pkg -side top -anchor w -padx 2
}
button $w.frmBtn.btnOk -text [::msgcat::mc "Save"] -relief groove -font $font(normal)\
-command { } -background $color(bg)
button $w.frmBtn.btnCancel -text [::msgcat::mc "Close"] -relief groove -font $font(normal)\
-command "destroy $w" -background $color(bg)
pack $w.frmBtn.btnOk $w.frmBtn.btnCancel -padx 2 -pady 2 -fill x -side left
}

112
lib/modules/pane.tcl Executable file
View File

@@ -0,0 +1,112 @@
######################################################
# TkTeXEditor
# Distributed under GNU Public License
# Author: Sergey Kalinin (BanZaj) banzaj@lrn.ru
# Copyright (c) "CONERO lab", 2002, http://conero.lrn.ru
######################################################
######################################################
# Create split pane widget procedure #
# Author Alex Dederer (aka Korwin) #
######################################################
package provide pane 1.0
namespace eval pane {
namespace export create
proc create { f1 f2 args } {
set t(-orient) vertical
set t(-percent) 0.27
set t(-gripcolor) gray75
set t(-gripposition) 0.93
set t(-gripcursor) crosshair
set t(-in) [winfo parent $f1]
array set t $args
set master $t(-in)
upvar #0 [namespace current]::Pane$master pane
array set pane [array get t]
if {! [string match v* $pane(-orient)] } {
set pane(-gripcursor) sb_v_double_arrow
set height 5 ; set width 3000
} else {
set pane(-gripcursor) sb_h_double_arrow
set height 3000 ; set width 5
}
set pane(1) $f1
set pane(2) $f2
set pane(grip) [frame $master.grip -background $pane(-gripcolor) \
-width $width -height $height \
-bd 1 -relief raised -cursor $pane(-gripcursor)]
if {! [string match v* $pane(-orient)] } {
set pane(D) Y
place $pane(1) -in $master -x 0 -rely 0.0 -anchor nw -relwidth 1.0 -height -1
place $pane(2) -in $master -x 0 -rely 1.0 -anchor sw -relwidth 1.0 -height -1
place $pane(grip) -in $master -anchor c -relx $pane(-gripposition)
} else {
set pane(D) X
place $pane(1) -in $master -relx 0.0 -y 0 -anchor nw -relheight 1.0 -width -1
place $pane(2) -in $master -relx 1.0 -y 0 -anchor ne -relheight 1.0 -width -1
place $pane(grip) -in $master -anchor c -rely 0 ;#$pane(-gripposition)
}
$master configure -background gray50
bind $master <Configure> [list [namespace current]::PaneGeometry $master]
bind $pane(grip) <ButtonPress-1> \
[list [namespace current]::PaneDrag $master %$pane(D)]
bind $pane(grip) <B1-Motion> \
[list [namespace current]::PaneDrag $master %$pane(D)]
bind $pane(grip) <ButtonRelease-1> \
[list [namespace current]::PaneStop $master]
[namespace current]::PaneGeometry $master
}
proc PaneDrag { master D } {
upvar #0 [namespace current]::Pane$master pane
if {[info exists pane(lastD)]} {
set delta [expr double($pane(lastD) - $D) \
/ $pane(size)]
set pane(-percent) [expr $pane(-percent) - $delta]
if {$pane(-percent) < 0.0} {
set pane(-percent) 0.0
} elseif {$pane(-percent) > 1.0} {
set pane(-percent) 1.0
}
[namespace current]::PaneGeometry $master
}
set pane(lastD) $D
}
proc PaneStop { master } {
upvar #0 [namespace current]::Pane$master pane
catch {unset pane(lastD)}
}
proc PaneGeometry { master } {
upvar #0 [namespace current]::Pane$master pane
if {$pane(D) == "X"} {
place $pane(1) -relwidth $pane(-percent)
place $pane(2) -relwidth [expr 1.0 - $pane(-percent)]
place $pane(grip) -relx $pane(-percent)
set pane(size) [winfo width $master]
} else {
place $pane(1) -relheight $pane(-percent)
place $pane(2) -relheight [expr 1.0 - $pane(-percent)]
place $pane(grip) -rely $pane(-percent)
set pane(size) [winfo height $master]
}
}
}

138
lib/modules/print.tcl Executable file
View File

@@ -0,0 +1,138 @@
######################################################
# TkTeXEditor
# Distributed under GNU Public License
# Author: Sergey Kalinin (BanZaj) banzaj@lrn.ru
# Copyright (c) "CONERO lab", 2002, http://conero.lrn.ru
######################################################
proc PrintDialog {action} {
global dir font nb files activeFile tcl_platform
if [info exists activeFile] {
set node $activeFile
} else {
return
}
if {$node == "newproj" || $node == "settings" || $node == "about" || $node == ""} {
return
}
if {[info exists files($node)] == 0} {
return
}
switch -- $action {
"print" {
PrintForm
}
"set" {
}
"preview" {
set text "$nb.f$node.f.text"
set fullPath [lindex $files($node) 0]
set folder [file dirname $fullPath]
set file [file tail $fullPath]
set ext [string trim [file extension $file] {.}]
set name [file rootname $file]
set file [file join $folder $name.ps]
if {$tcl_platform(platform) == "unix"} {
set pipe [open "|gv $file" "r"]
} elseif {$tcl_platform(platform) == "mac"} {
} elseif {$tcl_platform(platform) == "windows"} {
set pipe [open "|gsview32 $file" "r"]
}
fileevent $pipe readable
fconfigure $pipe -buffering none -blocking no
}
}
}
proc PrintForm {} {
global font selectPrint color
set wp .print
# destroy the print window if it already exists
if {[winfo exists $wp]} {
destroy $wp
}
toplevel $wp
wm transient $wp .
wm title $wp [::msgcat::mc "Print ..."]
wm resizable $wp 0 0
frame $wp.frmLbl -background $color(bg)
frame $wp.frmEnt -background $color(bg)
frame $wp.frmField -background $color(bg)
frame $wp.frmBtn -background $color(bg)
pack $wp.frmLbl $wp.frmEnt $wp.frmField $wp.frmBtn -side top -fill x
label $wp.frmLbl.lblPrint -text [::msgcat::mc "Print command"] -font $font(normal) -background $color(bg)
pack $wp.frmLbl.lblPrint -fill x -expand true -padx 2
entry $wp.frmEnt.entPrint -font $font(normal)
pack $wp.frmEnt.entPrint -fill x -expand true -padx 2
checkbutton $wp.frmField.chkSelect -text [::msgcat::mc "Print selected text"] -variable selectPrint\
-font $font(normal) -onvalue true -offvalue false\
-background $color(bg) -selectcolor $color(selectbg);#-command Check
pack $wp.frmField.chkSelect -fill x -expand true -padx 2 -anchor w
button $wp.frmBtn.btnPrint -text [::msgcat::mc "Print"] -font $font(normal) -width 12\
-relief groove -background $color(bg)\
-command {
Print [.print.frmEnt.entPrint get]
destroy .print
}
button $wp.frmBtn.btnCancel -text [::msgcat::mc "Cancel"] -font $font(normal) -width 12 -relief groove\
-command "destroy .print" -background $color(bg)
pack $wp.frmBtn.btnPrint $wp.frmBtn.btnCancel -side left -padx 2 -pady 2 -fill x -expand true
$wp.frmEnt.entPrint insert 0 "lpr"
bind $wp <Escape> "destroy .print"
}
proc Preview {action} {
global dir font nb files activeFile tcl_platform preview_cmd module tree
if [info exists activeFile] {
set node $activeFile
while {[set parentNode [$tree parent $node]] != "root"} {
set node $parentNode
}
} else {
return
}
if {$node == "newproj" || $node == "settings" || $node == "about" || $node == ""} {
return
}
if {[info exists files($node)] == 0} {
return
}
if {$module(preview_$action) == ""} {
set answer [tk_messageBox\
-message "[::msgcat::mc "Don't find programm"] $preview_cmd($action)"\
-type ok -icon warning\
-title [::msgcat::mc "Warning"]]
case $answer {
ok {return 0}
}
}
set text "$nb.f$node.f.text"
set fullPath [lindex $files($node) 0]
set file [file tail $fullPath]
set ext [string trim [file extension $file] {.}]
set name [file rootname $file]
if {$action == "html"} {
set folder [file join [file dirname $fullPath] $name]
} else {
set folder [file dirname $fullPath]
}
set pipe [open "|$preview_cmd($action) [file join $folder $name.$action]" "r"]
puts "$preview_cmd($action) [file join $folder $name.$action]"
fileevent $pipe readable
fconfigure $pipe -buffering none -blocking no
}

124
lib/modules/proc.tcl Executable file
View File

@@ -0,0 +1,124 @@
######################################################
# TkTeXEditor
# Distributed under GNU Public License
# Author: Sergey Kalinin (BanZaj) banzaj@lrn.ru
# Copyright (c) "CONERO lab", 2002, http://conero.lrn.ru
######################################################
######################################################
# #
# Notebook tabs procedures and other #
# #
######################################################
## CLICKING TUBULAR HEADER PROCEDURE ##
proc ClickTab {node} {
global nb files activeFile tree ver files status release
set node [$nb raise]
if {($node == "") || ($node == "debug")} {return}
set activeFile $node
set text "$nb.f$node.f.text"
set fullPath [lindex $files($node) 0]
wm title . "TkLaTeXEditor $ver$release - $fullPath"
set folder [file dirname $fullPath]
set file [file tail $fullPath]
set ext [string trim [file extension $file] {.}]
set name [file rootname $file]
$tree selection set $node
$tree see $node
UpdateStruct $fullPath $node
focus -force $text
unset text fullPath folder file ext name
## status bar information update ##
$status(fileAttr) configure -text "[FileAttr [lindex $files($node) 0]]"
$status(fileSize) configure -text "[file size [lindex $files($node) 0]] b."
$status(encode) configure -text "[lindex $files($node) 2]"
$status(pos) configure -text [$nb.f$node.f.text index insert];# cursor position
}
## NOTEBOOK PAGE SWITCHER ##
proc PageTab {key} {
global nb
set len [llength [$nb pages]]
if {$len > 0} {
set newIndex [expr [$nb index [$nb raise]] + $key]
if {$newIndex < 0} {
set newIndex [expr $len - 1]
} elseif {$newIndex >= $len} {
set newIndex 0
}
$nb see [lindex [$nb pages] $newIndex]
$nb raise [lindex [$nb pages] $newIndex]
PageRaise [lindex [$nb pages] $newIndex]
}
}
## RAISED NOTEBOOK TAB IF CLICK MOUSE BUTTON ##
proc PageRaise {node} {
global nb tree files status activeFile ver release
set parentNode [$tree parent $node]
if {$node == "debug"} {return}
if {[$tree exists $node] ==1 && [info exists files($node)] != 1} {
EditFile [$tree itemcget $node -data] ;# open editor if file don't open
} elseif {[$tree exists $node] ==0} {
set file [file tail [lindex $files($node) 0]]
set fileDir [file dirname [lindex $files($node) 0]]
set node [InsertTreeSubNode "$file" $parentNode $fileDir]
}
$nb raise $node
set activeFile $node
#puts "node - $node\nparent - $parentNode"
$tree selection set $node
$tree see $node
set item [$tree itemcget $node -data]
focus -force $nb.f$node.f.text
catch [$status(pos) configure -text [$nb.f$node.f.text index insert]] ;# cursor position
## status bar information update ##
$status(fileAttr) configure -text "[FileAttr $item]"
$status(fileSize) configure -text "[file size $item] b."
$status(encode) configure -text "[lindex $files($node) 2]"
$status(pos) configure -text [$nb.f$node.f.text index insert];# cursor position
UpdateStruct [lindex $files($node) 0] $node;# exec structure updating
wm title . "TkLaTeXEditor $ver$release - [lindex $files($node) 0]"
unset item
}
## CLOSE PROGRAMM PROCEDURE ##
proc Quit {} {
if {[FileDialog quit_close_all] == 0} {
return
} else {
exit
}
}
## AUTOSAVE AND AUTOREFRESH TIMERS PROCEDURE ##
set activeTimer(refresh) ""
set activeTimer(autosave) ""
proc Timer {file type} {
global timers activeFile activeTimer
if [info exists activeFile] {
} else {
return
}
if {$type == "refresh"} {
after cancel $activeTimer(refresh) ;# close previouse task
set activeTimer(refresh) [after $timers(refresh) {UpdateStruct $file $activeFile}]
} elseif {$type == "autosave"} {
after cancel $activeTimer(autosave) ;# close previouse task
set activeTimer(autosave) [after $timers(autosave) {FileDialog save_all}]
}
}
proc GetExtention {file} {
global fileList
set ext [string range [file extension [file tail $file]] 1 end]
return $ext
}

164
lib/modules/render.tcl Executable file
View File

@@ -0,0 +1,164 @@
#############################################################
# 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)]
}

216
lib/modules/spellcheck.tcl Executable file
View File

@@ -0,0 +1,216 @@
#########################################################
# Tk LaTeX Editor
# Distributed under GNU Public License
# Author: Sergey Kalinin (BanZaj) banzaj@lrn.ru
# Copyright (c) "CONERO lab", 2002, http://conero.lrn.ru
#########################################################
# Spell Checking procedure
# required Ispell, Msgcat
# Author: Victor Wagner (Vitus) http://www.ice.ru/~vitus
#
# Usage: "SpellCheck text_widget"
#########################################################
proc SpellCheck {text} {
global ispell_lib ispell_language ispell_startindex nb color font
set node [$nb raise]
if {[winfo exists .spell]} {
return
}
if {$node == "newproj" || $node == "settings" || $node == "about" || $node == ""} {
return
}
# Build dictionary list
foreach dict [glob [file join $ispell_lib *.hash]] {
file stat $dict foo
set lang [file rootname [file tail $dict]]
if {$lang == "default"} {
set default_inode $foo(ino)
} else {
lappend langs $lang
set lang_nodes($foo(ino)) $lang;
}
}
if {![info exists ispell_language]} {
if {[info exists default_inode ]&&[info exists lang_nodes($default_inode)]} {
set ispell_language $lang_nodes($default_inode)
} else {
set ispell_language [lindex $langs 0]
}
}
toplevel .spell -class Notepad
wm title .spell [::msgcat::mc "Spell check"]
wm transient .spell .
wm resizable .spell 0 0
frame .spell.lang -relief raised -borderwidth 1 -background $color(bg)
label .spell.lang.l -text [::msgcat::mc "Language"] -background $color(bg) -font $font(normal)
eval tk_optionMenu .spell.lang.m ispell_language $langs -background $color(bg) -font $font(normal)
pack .spell.lang.l .spell.lang.m -side left -padx 5
pack .spell.lang.m -side left -padx 5 -fill x -expand 1
frame .spell.start -relief raised -borderwidth 1 -background $color(bg)
radiobutton .spell.start.all -text [::msgcat::mc "Entire file"] -background $color(bg)\
-variable ispell_startindex -value "1.0" -anchor w -font $font(normal)
radiobutton .spell.start.ins -text [::msgcat::mc "From cursor"] -background $color(bg)\
-variable ispell_startindex -value insert -anchor w -font $font(normal)
pack .spell.start.all .spell.start.ins -side top -pady 1 -expand y -fill x
frame .spell.b -relief raised -borderwidth 1 -background $color(bg)
button .spell.b.ok -text [::msgcat::mc "Start"] -relief groove -background $color(bg)\
-command "DoSpellCheck $text" -font $font(normal)
button .spell.b.cancel -text [::msgcat::mc "Cancel"] -relief groove -background $color(bg)\
-command "destroy .spell" -font $font(normal)
pack .spell.b.ok .spell.b.cancel -side left -padx 10
pack .spell.lang -side top -fill x
pack .spell.start -side top -fill both -expand 1
pack .spell.b -side top -fill x
bind .spell <Escape> "destroy .spell"
}
proc DoSpellCheck {text} {
global ispell_file ispell_startindex ispell_language spellAddWords color font
eval destroy [winfo children .spell]
wm transient .spell .
entry .spell.word -exportselection false
listbox .spell.misses -yscrollcommand ".spell.y set" -exportselection false -background $color(bg)
scrollbar .spell.y -command ".spell.misses yview" -background $color(bg)
button .spell.ok -text [::msgcat::mc "Accept"] -command "SpellOk $text" -background $color(bg) \
-font $font(normal)
button .spell.accept -text [::msgcat::mc "Next"] -command "SpellAccept @" -background $color(bg) \
-font $font(normal)
button .spell.adddict -text [::msgcat::mc "Add to dict"] -command "SpellAccept *" -background $color(bg) \
-font $font(normal)
button .spell.adddict2 -text [::msgcat::mc "Add lowercase"] -command "SpellAccept &" -background $color(bg) \
-font $font(normal)
button .spell.stop -text [::msgcat::mc "Stop checking"] -command "SpellStop $text" -background $color(bg) \
-font $font(normal)
grid .spell.word - - -sticky news -padx 5 -pady 5
grid .spell.misses .spell.y .spell.ok -sticky news
grid x x .spell.accept -sticky news
grid x x .spell.adddict -sticky news
grid x x .spell.adddict2 -sticky news
grid x x .spell.stop -sticky news
grid configure .spell.ok .spell.accept .spell.adddict .spell.adddict2 .spell.stop -padx 5 -pady 3
grid configure .spell.misses .spell.y -rowspan 5
focus .spell.word
wm protocol .spell WM_DELETE_WINDOW "SpellStop $text"
set ispell_file [open "|ispell -a -d $ispell_language" w+]
fconfigure $ispell_file -buffering none -blocking yes
gets $ispell_file
puts $ispell_file "!"
set spellAddWords {}
$text mark set insert $ispell_startindex
while {[SpellNextLine $text]} {
while {[gets $ispell_file responce]>0} {
switch -exact -- [string range $responce 0 0] {
"*" -
"+" -
"-" {continue}
"&" -
"?" {regexp {^. +([^ ]+) +[0-9]+ +([0-9]+):(.*)$} $responce foo \
orig offset guesses
SpellInteract $orig $offset $guesses $text
}
"#" {regexp {^. +([^ ]+) +([0-9]+)} $responce foo orig offset
SpellInteract $orig $offset {} $text
}
}
}
$text mark set insert "spellstart linestart + 1 lines"
}
close $ispell_file
eval destroy [winfo children .spell]
label .spell.l -text [::msgcat::mc "Checking complete"] -background $color(bg)
button .spell.ok -text [::msgcat::mc "Ok"] -command {destroy .spell} -background $color(bg)
wm protocol .spell WM_DELETE_WINDOW {destroy .spell}
pack .spell.l .spell.ok -side top -padx 5 -pady 10
}
proc SpellNextLine {text} {
global spellOffset ispell_file spellAddWords
set spellOffset -1
$text see insert
$text mark set spellstart insert
set line [$text get insert "insert lineend"]
if [$text compare insert >= "end-1char"] {
return 0
}
foreach word $spellAddWords {
puts "Adding to dictionary $word"
puts $ispell_file $word
}
set spellAddWords {}
puts $ispell_file "^$line"
return 1
}
proc SpellInteract {word offset guesses text} {
.spell.word delete 0 end
.spell.word insert 0 $word
$text tag remove sel 0.0 end
global spellOffset
incr offset $spellOffset
$text tag add sel "spellstart+$offset chars" "spellstart+[expr $offset+\
[string length $word]] chars"
global spellHighlight
set spellHighlight [$text tag ranges sel]
$text see sel.first
$text mark set insert sel.first
.spell.misses delete 0 end
if [string length $guesses] {
foreach miss [split $guesses ","] {
.spell.misses insert end [string trim $miss]
}
}
global spellInteractResult
vwait spellInteractResult
return -code $spellInteractResult
}
proc SpellOk {text} {
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> .spell.word <20><><EFBFBD> .spell.misses
global spellInteractResult spellHighlight
if [llength [.spell.misses curselection]] {
set word [.spell.misses get [.spell.misses curselection]]
} else {
set word [.spell.word get]
}
if {![llength [$text tag ranges sel]]} {
global spellHighilight
eval $text tag add sel $spellHighlight
}
set oldword [$text get sel.first sel.last]
if {[string compare $oldword $word]} {
$text delete sel.first sel.last
$text insert insert $word sel
global changed spellOffset
set changed 1
incr spellOffset [expr [string length $word]-[string length $oldword]]
}
set spellInteractResult ok
}
proc SpellAccept {cmd} {
global spellAddWords spellInteractResult
lappend spellAddWords "$cmd[.spell.word get]"
set spellInteractResult ok
}
proc SpellStop {text} {
global ispell_file
$text mark unset spellstart
catch {close $ispell_file}
destroy .spell
set spellInteractResult return
}

59
lib/modules/splashscreen.tcl Executable file
View File

@@ -0,0 +1,59 @@
######################################################
# Tk LaTeX Editor
# Distributed under GNU Public License
# Author: Sergey Kalinin (aka BanZaj) banzaj@lrn.ru
# Copyright (c) "CONERO lab", 2004, http://conero.lrn.ru
######################################################
proc ShowSplashScreen {} {
global font
global dir tree nb ver font release
set max 200
set w .about
if {[winfo exists $w]} {
destroy $w
}
toplevel $w
wm title $w [::msgcat::mc "Strting Tk LaTeX Editor ..."]
#wm resizable $w 0 0
wm transient $w .
frame $w.frmImg -borderwidth 2 -relief ridge -background black
image create photo imgAbout -format gif -file [file join $dir(img) tle.gif]
image create photo imgConero -format gif -file [file join $dir(img) conero.gif]
label $w.frmImg.lblImg -image imgAbout -background black
pack $w.frmImg.lblImg -side top -fill x
frame $w.frmlbl -borderwidth 2 -relief ridge -background "#8700d1"
label $w.frmlbl.lblVersion -text "[::msgcat::mc Version] $ver$release"\
-background "#8700d1" -foreground black
label $w.frmlbl.lblAuthorName -text "[::msgcat::mc Authors]:"\
-background "#8700d1" -foreground black
label $w.frmlbl.lblAuthor1 -text "Sergey Kalinin (aka BanZaj), banzaj@lrn.ru"\
-background "#8700d1" -foreground black
label $w.frmlbl.lblAuthor2 -text "Constantin I Makhailenko (aka Const), const@mail.ru"\
-background "#8700d1" -foreground black
frame $w.frame
ProgressBar $w.frame.bar \
-variable splash_count -width 100 -height 10 -maximum $max
label $w.frame.info -textvariable info
pack $w.frmlbl.lblVersion $w.frmlbl.lblAuthorName $w.frmlbl.lblAuthor1 $w.frmlbl.lblAuthor2 -side top -padx 5
pack $w.frmImg -side top -fill x
pack $w.frmlbl -side top -expand true -fill both
pack $w.frame.bar $w.frame.info -side top -expand true -fill x
bind $w <Escape> "destroy .about"
bind $w <Return> "destroy .about"
#
}
#ShowSplashScreen

291
lib/modules/struct.tcl Executable file
View File

@@ -0,0 +1,291 @@
######################################################
# TkTeXEditor
# Distributed under GNU Public License
# Author: Sergey Kalinin (BanZaj) banzaj@lrn.ru
# Copyright (c) "CONERO lab", 2002, http://conero.lrn.ru
######################################################
######################################################
# #
# Document structure module (insert\update\deleted #
# #
######################################################
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 in(lbl) 0 ;# label cuonter
set in(ref) 0 ;# ref counter
set in(pageref) 0 ;# ref counter
set in(include) 0
set in(input) 0
set in(cite) 0
set in(bibitem) 0
set in(image) 0
set lastPart "root"
set lastChapter "root"
set lastSection "root"
set lastSSection "root"
set lastSSSection "root"
set lastPar "root"
set lastSubPar "root"
## INSERT STRUCT PROCEDURE ##
## reading and parsing string from surce file
## and execute procedures for inserted required structure into structure tree
proc InsertStruct {node line lineNumber fileDir } {
global tree treeStruct dir font color in lastNode activeFile
global lastPart lastChapter lastSection lastSSection lastSSSection
global lastPar lastSubPar lastLabel files nb thumbnail thumb
#puts $fileDir
if [regexp -nocase -all -- {(\\part)(\*|)(\[.*?\])*(\{.*?\})} $line struct v1 v1_5 v2 v3] {
incr in(p)
InsertNode "part_$in(p)" "root" "[string trimleft [string trimright $v1_5$v3 "\}"] "\{"]" part $lineNumber
set lastPart "part_$in(p)"
}
if [regexp -nocase -all -- {(\\chapter)(\*|)(\[.*?\])*(\{.*?\})} $line struct v1 v1_5 v2 v3] {
incr in(c)
InsertNode "chapter_$in(c)" "$lastPart" "[string trimleft [string trimright $v1_5$v3 "\}"] "\{"]" chapter $lineNumber
set lastChapter chapter_$in(c)
}
if [regexp -nocase -all -- {(\\section)(\*|)(\[.*?\])*(\{.*?\})} $line struct v1 v1_5 v2 v3] {
incr in(s)
InsertNode "section_$in(s)" "$lastChapter" "[string trimleft [string trimright $v1_5$v3 "\}"] "\{"]" section $lineNumber
set lastSection "section_$in(s)"
}
if [regexp -nocase -all -- {(\\subsection)(\*|)(\[.*?\])*(\{.*?\})} $line struct v1 v1_5 v2 v3] {
incr in(ss)
InsertNode "subsection_$in(ss)" "$lastSection" "[string trimleft [string trimright $v1_5$v3 "\}"] "\{"]" ssection $lineNumber
set lastSSection "subsection_$in(ss)"
}
if [regexp -nocase -all -- {(\\subsubsection)(\*|)(\[.*?\])*(\{.*?\})} $line struct v1 v1_5 v2 v3] {
incr in(sss)
InsertNode "subsubsection_$in(sss)" "$lastSSection" "[string trimleft [string trimright $v1_5$v3 "\}"] "\{"]" sssection $lineNumber
set lastSSSection "subsubsection_$in(sss)"
}
if [regexp -nocase -all -- {(\\paragraph)(\*|)(\[.*?\])*(\{.*?\})} $line struct v1 v1_5 v2 v3] {
incr in(par)
InsertNode "paragraph_$in(par)" "$lastSSSection" "[string trimleft [string trimright $v1_5$v3 "\}"] "\{"]" paragraph $lineNumber
set lastPar "paragraph_$in(par)"
}
if [regexp -nocase -all -- {(\\subparagraph)(\*|)(\[.*?\])*(\{.*?\})} $line struct v1 v1_5 v2 v3] {
incr in(spar)
InsertNode "subparagraph_$in(spar)" "$lastPar" "[string trimleft [string trimright $v1_5$v3 "\}"] "\{"]" subparagraph $lineNumber
set lastSubPar "subparagraph_$in(spar)"
}
if [regexp -nocase -all -- {(\\label)(\{.*?\})} $line struct v1 v2] {
incr in(lbl)
InsertLabel "label_$in(lbl)" "$v2" "label"
}
if [regexp -nocase -all -- {(\\ref)(\{.*?\})} $line struct v1 v2] {
incr in(ref)
InsertRef "ref_$in(ref)" "$v2"
}
if [regexp -nocase -all -- {(\\pageref)(\{.*?\})} $line struct v1 v2] {
incr in(pageref)
InsertPageref "pageref_$in(pageref)" "$v2"
}
if [regexp -nocase -all -- {(\\cite)(\{.*?\})} $line struct v1 v2] {
incr in(cite)
InsertLabel "cite_$in(cite)" "$v2" "cite"
}
if [regexp -nocase -all -- {(\\bibitem)(\{.*?\})} $line struct v1 v2] {
incr in(bibitem)
InsertLabel "bibitem_$in(bibitem)" "$v2" "bibitem"
}
if { [regexp -nocase -all -- {(\\input)(\{.*?\})} $line struct v1 v2] || [regexp -nocase -all -- {(\\include)(\{.*?\})} $line struct v1 v2] } {
incr in(input)
set fullPath [string trimleft [string trimright $v2 "\}"] "\{"]
set dirName [file dirname $fullPath]
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if [info exists activeFile] {
#puts $activeFile
# set nod $activeFile
#while {[set parentNode [$tree parent $nod]] != "root"} {set nod $parentNode}
} else {
#return
}
set rootPath [file dirname [$tree itemcget $node -data]]
set file [file tail $fullPath]
if {$dirName != "."} {
set dirName [string range $dirName [expr [string first "/" $dirName]+1] end]
set fileDir [file join $rootPath $dirName]
} else {
set fileDir $rootPath
}
puts "fullPath - $fullPath\nrootPath - $rootPath\n dirName-$dirName\nfile=$file\nfilrDir-$fileDir"
set subNode [InsertTreeSubNode "$file" "$activeFile" $fileDir]
#puts "InsertStruct: node - $subNode\tparent - $node"
#return
if [info exists files($subNode)] {
#puts "$subNode"
#puts "<22><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> [lindex $files($subNode) 0]"
InsertTreeSubNode $file $node $dirName
UpdateStruct [lindex $files($subNode) 0] $subNode
}
set ext [file extension $file]
if {$ext == ""} {
set ext "tex"
}
if {[file exists [file join $fileDir $file.$ext]] == 0} {
$tree itemconfigure $subNode -image [Bitmap::get [file join $dir(img) error.gif]]
}
}
if {[regexp -nocase -all -- {(\\includegraphics)(\{.*?\})} $line struct v1 v2] ==1 || \
[regexp -nocase -all -- {(\\includegraphics)(\[.*?\])(\{.*?\})} $line struct v1 v3 v2] ==1} {
if {[string tolower $thumb(show)] == "no"} {
return
}
incr in(image)
set imagePath [file dirname $v2]
set rootPath [file dirname [$tree itemcget $node -data]]
if {$imagePath == "."} {
set fullPathToFile [file join $rootPath [string trimleft [string trimright $v2 "\}"] "\{"]]
}
set fullPathToFile [file join $rootPath [string trimleft [string trimright $v2 "\}"] "\{"]]
set subNode [InsertTreeSubNode [file tail $fullPathToFile] $node [file dirname $fullPathToFile]]
$tree itemconfigure $subNode -image [Bitmap::get [file join $dir(img) img.gif]]
puts "$imagePath - $rootPath"
set imgFile [ConvertImage $fullPathToFile]
if {[info exists thumbnail($imgFile)] == 0} {
set thumbnail($imgFile) [image create photo -file $imgFile]
$nb.f$activeFile.f.text image create $lineNumber.end -image $thumbnail($imgFile)
puts "Image $thumbnail($imgFile) was create"
} else {
if [lsearch [$nb.f$activeFile.f.text image names ] $thumbnail($imgFile)] {
puts "$thumbnail($imgFile) - Image already created"
} else {
#$nb.f$activeFile.f.text image create $lineNumber.end -image $thumbnail($imgFile)
}
#puts "image - $thumbnail($imgFile)\n lists - [$nb.f$activeFile.f.text image names ]"
}
}
}
## UPDATE DOCUMENT STRUCTURE PROCEDURE ##
proc UpdateStruct {file node} {
#puts $file
#puts $node
global tree treeStruct dir font color lblList files
global lastPart lastChapter lastSection lastSSection lastSSSection
global lastPar lastSubPar in nb dir activeFile
if [info exists files($node)] {
Timer $file "refresh"
} else {
return
}
#FileDialog save
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
set dirName [file dirname $file]
set file [file tail $file]
set text "$nb.f$node.f.text"
set contents [$text get 0.0 end]
set fhandle [open [file join $dir(tmp) $file.bak] "w"]
puts $fhandle $contents nonewline
close $fhandle
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 in(lbl) 0 ;# label cuonter
set in(ref) 0 ;# ref counter
set in(pageref) 0 ;# ref counter
set in(include) 0
set in(input) 0
set in(cite) 0
set in(bibitem) 0
set lastPart "root"
set lastChapter "root"
set lastSection "root"
set lastSSection "root"
set lastSSSection "root"
set lastPar "root"
set lastSubPar "root"
## check if file was deleted from declaration \input and \include
## adding new node into file tree
#set node $activeFile
set parentNode [$tree parent $node]
#puts "UpdateStruct: node - $node\tparent - $parentNode"
if [$tree exists $node] {
$tree delete [$tree nodes $node] ;# delete all info about old structure
} else {
set file [file tail [lindex $files($node) 0]]
set fileDir [file dirname [lindex $files($node) 0]]
InsertTreeSubNode "$file" $parentNode $fileDir
}
$treeStruct delete [$treeStruct nodes root] ;# delete all info about old structure
$lblList delete [$lblList item 0 end] ;# deleted all old labels from label list
set fHandle [open [file join $dir(tmp) $file.bak] "r"]
set lineNumber 1
while {[gets $fHandle line]>=0} {
InsertStruct $node $line $lineNumber $dirName
incr lineNumber
}
unset dirName text contents
}
proc InsertLabel {node label img} {
global tree treeStruct lblList dir
set label [string trimleft $label "\{"]
set label [string trimright $label "\}"]
$lblList insert end $node -text "$label" -image [Bitmap::get [file join $dir(img) $img.gif]]
unset label
}
proc InsertRef {node label} {
global tree treeStruct lblList dir
set label [string trimleft $label "\{"]
set label [string trimright $label "\}"]
$lblList insert end $node -text "$label" -image [Bitmap::get [file join $dir(img) ref.gif]]
unset label
}
proc InsertPageref {node label} {
global tree treeStruct lblList dir
set label [string trimleft $label "\{"]
set label [string trimright $label "\}"]
$lblList insert end $node -text "$label" -image [Bitmap::get [file join $dir(img) pageref.gif]]
unset label
}
proc FindLabel {node} {
global nb activeFile lblList status
$lblList selection set $node
set t [$lblList itemcget $node -text]
set text [string range $node 0 [expr [string first "_" $node]-1]]
set findString "$text\{$t\}"
set text "$nb.f$activeFile.f.text"
FindProc $text $findString $activeFile
$status(pos) configure -text [$text index insert];# cursor position
unset text t findString
}

390
lib/modules/supertext.tcl Executable file
View File

@@ -0,0 +1,390 @@
# supertext.tcl v1.01
#
# Copyright (c) 1998 Bryan Oakley
# All Rights Reserved
#
# this code is freely distributable, but is provided as-is with
# no waranty expressed or implied.
# send comments to oakley@channelpoint.com
# What is this?
#
# This is a replacement for (or superset of , or subclass of, ...)
# the tk text widget. Its big feature is that it supports unlimited
# undo. It also has two poorly documented options: -preproc and
# -postproc.
# The entry point to this widget is supertext::text; it takes all of
# the same arguments as the standard text widget and exhibits all of
# the same behaviors. The proc supertext::overrideTextCommand may be
# called to have the supertext widget be used whenever the command
# "text" is used (ie: it imports supertext::text as the command "text").
# Use at your own risk...
# To access the undo feature, use ".widget undo". It will undo the
# most recent insertion or deletion. On windows and the mac
# this command is bound to <Control-z>; on unix it is bound to
# <Control-_>
# if you are lucky, you might find documentation here:
# http://www1.clearlight.com/~oakley/tcl/supertext.html
package provide supertext 1.01
namespace eval supertext {
variable undo
variable undoIndex
variable text "::text"
variable preProc
variable postProc
namespace export text
}
# this proc is probably attempting to be more clever than it should...
# When called, it will (*gasp*) rename the tk command "text" to "_text_",
# then import our text command into the global scope.
#
# Use at your own risk!
proc supertext::overrideTextCommand {} {
variable text
set text "::_text_"
rename ::text $text
uplevel #0 namespace import supertext::text
}
proc supertext::text {w args} {
variable text
variable undo
variable undoIndex
variable preProc
variable postProc
# this is what we will rename our widget proc to...
set original __$w
# do we have any of our custom options? If so, process them and
# strip them out before sending them to the real text command
if {[set i [lsearch -exact $args "-preproc"]] >= 0} {
set j [expr $i + 1]
set preProc($original) [lindex $args $j]
set args [lreplace $args $i $j]
} else {
set preProc($original) {}
}
if {[set i [lsearch -exact $args "-postproc"]] >= 0} {
set j [expr $i + 1]
set postProc($original) [lindex $args $j]
set args [lreplace $args $i $j]
} else {
set postProc($original) {}
}
# let the text command create the widget...
eval $text $w $args
# now, rename the resultant widget proc so we can create our own
rename ::$w $original
# here's where we create our own widget proc.
proc ::$w {command args} \
"namespace eval supertext widgetproc $w $original \$command \$args"
# set up platform-specific binding for undo; the only one I'm
# really sure about is winders; the rest will stay the same for
# now until someone has a better suggestion...
switch $::tcl_platform(platform) {
unix {
event add <<Undo>> <Control-z>
event add <<Undo>> <Control-Z>
}
windows {
event add <<Undo>> <Control-z>
event add <<Undo>> <Control-Z>
}
macintosh {
event add <<Undo>> <Control-z>
event add <<Undo>> <Control-Z>
}
}
bind $w <<Undo>> "$w undo"
set undo($original) {}
set undoIndex($original) -1
set clones($original) {}
return $w
}
# this is the command that we associate with a supertext widget.
proc supertext::widgetproc {this w command args} {
variable undo
variable undoIndex
variable preProc
variable postProc
# these will be the arguments to the pre and post procs
set originalCommand $command
set originalArgs $args
# is there a pre-proc? If so, run it. If there is a problem,
# die. This is potentially bad, because once there is a problem
# in a preproc the user must fix the preproc -- there is no
# way to unconfigure the preproc. Oh well. The other choice
# is to ignore errors, but then how will the caller know if
# the proc fails?
if {[info exists preProc($w)] && $preProc($w) != ""} {
if {[catch "$preProc($w) command args" error]} {
return -code error "error during processing of -preproc: $error"
}
}
# if the command is "undo", we need to morph it into the appropriate
# command for undoing the last item on the stack
if {$command == "undo"} {
if {$undoIndex($w) == ""} {
# ie: last command was anything _but_ an undo...
set undoIndex($w) [expr [llength $undo($w)] -1]
}
# if the index is pointing to a valid list element,
# lets undo it...
if {$undoIndex($w) < 0} {
# nothing to undo...
bell
} else {
# data is a list comprised of a command token
# (i=insert, d=delete) and parameters related
# to that token
set data [lindex $undo($w) $undoIndex($w)]
if {[lindex $data 0] == "d"} {
set command "delete"
} else {
set command "insert"
}
set args [lrange $data 1 end]
# adjust the index
incr undoIndex($w) -1
}
}
# now, process the command (either the original one, or the morphed
# undo command
switch $command {
reset_undo {
set undo($w) ""
set undoIndex($w) ""
set result {}
}
configure {
# we have to deal with configure specially, since the
# user could try to configure the -preproc or -postproc
# options...
if {[llength $args] == 0} {
# first, the case where they just type "configure"; lets
# get it out of the way
set list [$w configure]
lappend list [list -preproc preproc Preproc {} $preProc($w)]
lappend list [list -postproc postproc Postproc {} $postProc($w)]
set result $list
} elseif {[llength $args] == 1} {
# this means they are wanting specific configuration
# information
set option [lindex $args 0]
if {$option == "-preproc"} {
set result [list -preproc preproc Preproc {} $preProc($w)]
} elseif {$option == "-postproc"} {
set result [list -postproc postproc Postproc {} $postProc($w)]
} else {
if {[catch "$w $command $args" result]} {
regsub $w $result $this result
return -code error $result
}
}
} else {
# ok, the user is actually configuring something...
# we'll deal with our special options first
if {[set i [lsearch -exact $args "-preproc"]] >= 0} {
set j [expr $i + 1]
set preProc($w) [lindex $args $j]
set args [lreplace $args $i $j]
set result {}
}
if {[set i [lsearch -exact $args "-postproc"]] >= 0} {
set j [expr $i + 1]
set postProc($w) [lindex $args $j]
set args [lreplace $args $i $j]
set result {}
}
# now, process any remaining args
if {[llength $args] > 0} {
if {[catch "$w $command $args" result]} {
regsub $w $result $this result
return -code error $result
}
}
}
}
undo {
# if an undo command makes it to here, that means there
# wasn't anything to undo; this effectively becomes a
# no-op
set result {}
}
insert {
if {[catch {set index [text_index $w [lindex $args 0]]}]} {
set index [lindex $args 0]
}
# since the insert command can have an arbitrary number
# of strings and possibly tags, we need to ferret that out
# now... what a pain!
set myargs [lrange $args 1 end]
set length 0
while {[llength $myargs] > 0} {
incr length [string length [lindex $myargs 0]]
if {[llength $myargs] > 1} {
# we have a tag...
set myargs [lrange $myargs 2 end]
} else {
set myargs [lrange $myargs 1 end]
}
}
# now, let the real widget command do the dirty work
# of inserting the text. If we fail, do some munging
# of the error message so the right widget name appears...
if {[catch "$w $command $args" result]} {
regsub $w $result $this result
return -code error $result
}
# we need this for the undo stack; index2 couldn't be
# computed until after we inserted the data...
set index2 [text_index $w "$index + $length chars"]
if {$originalCommand == "undo"} {
# let's do a "see" so what we just did is visible;
# also, we'll move the insertion cursor to the end
# of what we just did...
$w see $index2
$w mark set insert $index2
} else {
# since the original command wasn't undo, we need
# to reset the undoIndex. This means that the next
# time an undo is called for we'll start at the
# end of the stack
set undoIndex($w) ""
}
# add a delete command on the undo stack.
lappend undo($w) "d $index $index2"
}
delete {
# this converts the insertion index into an absolute address
set index [text_index $w [lindex $args 0]]
# lets get the data we are about to delete; we'll need
# it to be able to undo it (obviously. Duh.)
set data [eval $w get $args]
# add an insert on the undo stack
lappend undo($w) [list "i" $index $data]
if {$originalCommand == "undo"} {
# let's do a "see" so what we just did is visible;
# also, we'll move the insertion cursor to a suitable
# spot
$w see $index
$w mark set insert $index
} else {
# since the original command wasn't undo, we need
# to reset the undoIndex. This means that the next
# time an undo is called for we'll start at the
# end of the stack
set undoIndex($w) ""
}
# let the real widget command do the actual deletion. If
# we fail, do some munging of the error message so the right
# widget name appears...
if {[catch "$w $command $args" result]} {
regsub $w $result $this result
return -code error $result
}
}
default {
# if the command wasn't one of the special commands above,
# just pass it on to the real widget command as-is. If
# we fail, do some munging of the error message so the right
# widget name appears...
if {[catch "$w $command $args" result]} {
regsub $w $result $this result
return -code error $result
}
}
}
# is there a post-proc? If so, run it.
if {[info exists postProc($w)] && $postProc($w) != ""} {
if {[catch "$postProc($w) originalCommand originalArgs" error]} {
return -code error "error during processing of -postproc: $error"
}
}
# we're outta here! (I think this is faster than a
# return, though I'm not 100% sure on this...)
set result $result
}
# this returns a normalized index (ie: line.column), with special
# handling for the index "end"; to undo something we pretty much
# _have_ to have a precise row and column number.
proc supertext::text_index {w i} {
if {$i == "end"} {
set index [$w index "end-1c"]
} else {
set index [$w index $i]
}
return $index
}

147
lib/modules/table.tcl Executable file
View File

@@ -0,0 +1,147 @@
######################################################
# Tk LaTeX Editor
# Distributed under GNU Public License
# Author: Sergey Kalinin (BanZaj) banzaj@lrn.ru
# Copyright (c) "CONERO lab", 2002, http://conero.lrn.ru
######################################################
proc InsertTableDialog {} {
global nb font files findString replaceString text dir color
set node [$nb raise]
if {$node == "newproj" || $node == "settings" || $node == "about" || $node == ""} {
return
}
#set file $files($node)
set w .table
set text "$nb.f$node.f.text"
# set findString ""
# destroy the find window if it already exists
if {[winfo exists $w]} {
destroy $w
}
set colNum 1
set posTable "center"
set align "center"
set line "full"
toplevel $w
wm transient $w $nb.f$node
wm title $w [::msgcat::mc "Add table"]
wm resizable $w 0 0
set f1 [frame $w.frmAlign -borderwidth 1 -relief raised -background $color(bg)]
set f2 [frame $w.frmTable -borderwidth 1 -relief raised -background $color(bg)]
set f3 [frame $w.frmBtn -borderwidth 1 -background $color(bg)]
set f4 [frame $w.frmCol -borderwidth 1 -relief raised -background $color(bg)]
set f5 [frame $w.frmPos -borderwidth 1 -relief raised -background $color(bg)]
pack $f4 $f1 $f2 $f5 $f3 -side top -fill x -expand true
label $f4.lblCol -text [::msgcat::mc "Input number of columns"] -background $color(bg)
SpinBox $f4.spinCol -textvariable colNum -range {1 100 1} -helptext "Columns" -background $color(bg)
pack $f4.lblCol $f4.spinCol -side top -fill x -pady 2 -padx 2
label $f1.lbl -text [::msgcat::mc "Alignment"] -background $color(bg)
pack $f1.lbl -side top -fill x
foreach btn {center left right} {
radiobutton $f1.btn$btn -text [::msgcat::mc "Align $btn"] -variable align\
-value $btn -font $font(normal) -selectcolor $color(selectbg) -background $color(bg)
pack $f1.btn$btn -side top -anchor w
}
label $f5.lblPos -text [::msgcat::mc "Table position"] -background $color(bg)
pack $f5.lblPos -side top -fill x
foreach tbl {top bottom center} {
image create photo img_$tbl -file [file join $dir(img) table_$tbl.gif]
radiobutton $f5.btn$tbl -variable table -indicatoron 0 -background $color(bg)\
-font $font(normal) -image img_$tbl -value $tbl -selectcolor $color(selectbg)
pack $f5.btn$tbl -side left -anchor n -pady 2
}
label $f2.lblLine -text [::msgcat::mc "Line type"] -background $color(bg)
pack $f2.lblLine -side top -fill x
foreach tbl {empty full double cols lines} {
image create photo img_$tbl -file [file join $dir(img) table_$tbl.gif]
radiobutton $f2.btn$tbl -variable line -indicatoron 0 -background $color(bg)\
-font $font(normal) -image img_$tbl -value $tbl -selectcolor $color(selectbg)
pack $f2.btn$tbl -side left -anchor n -pady 2
}
button $f3.btnAdd -text "[::msgcat::mc "Insert"] - Enter" -font $font(normal)\
-relief groove -background $color(bg) -command {
InsertTable $colNum $table $line $align
destroy .table
}
button $f3.btnCancel -text "[::msgcat::mc "Cancel"] - Esc" -command "destroy $w"\
-font $font(normal) -relief groove -background $color(bg)
pack $f3.btnAdd $f3.btnCancel\
-side left -padx 2 -pady 2 -fill x
bind $w <Return> ""
bind $w <F4> ""
bind $w <Escape> "destroy $w"
}
proc InsertTable {colNum posTable line align} {
global dir font color nb
set node [$nb raise]
if {$node == ""} {return}
set text "$nb.f$node.f.text"
set pos [$text index insert]
set curLine [lindex [split $pos "."] 0]
set cursor [lindex [split $pos "."] 1]
set editLine [$text get $curLine.0 $pos]
set header "\\begin\{tabular\}"
set footer "\\end\{tabular\}"
if {$line == "double"} {
set split "||"
set lineEnd "\\\\ \\hline\n"
} elseif {$line == "full"} {
set split "|"
set lineEnd "\\\\ \\hline\n"
} elseif {$line == "empty"} {
set split " "
set lineEnd "\\\\\n"
} elseif {$line == "cols"} {
set split "|"
set lineEnd "\\\\\n"
} elseif {$line == "lines"} {
set split " "
set lineEnd "\\\\ \\hline\n"
} else {
set split " "
set lineEnd "\\\\\n"
}
switch -- $posTable {
top {set position "t"}
bottom {set position "b"}
center {set position "c"}
}
switch -- $align {
center {set colAlign "c"}
left {set colAlign "l"}
right {set colAlign "r"}
}
set count 0
set count_ 0
while {$colNum > $count} {
append columns "$split$colAlign"
incr count
}
while {$colNum > [expr $count_+1]} {
append body "& "
incr count_
}
append columns $split
$text insert $pos "$header\[$position\]\{$columns\} $lineEnd\t$body$lineEnd$footer"
$text mark set insert [expr $curLine +1].1
$text see insert
}

126
lib/modules/template.tcl Executable file
View File

@@ -0,0 +1,126 @@
######################################################
# TkTeXEditor
# Distributed under GNU Public License
# Author: Sergey Kalinin (aka BanZaj) banzaj@lrn.ru
# Copyright (c) "CONERO lrn", 2002, http://conero.lrn.ru
######################################################
proc TemplateDialog {} {
global dir nb tmpl font color relief
set w .template
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 geometry $w 550x300
wm transient $w .
frame $w.frmCanv -border 1 -relief sunken
frame $w.frmBtn -border 1 -relief sunken
frame $w.frmTxt -border 1 -relief sunken
pack $w.frmCanv -side top -fill both -padx 1 -pady 1 -expand 1 -fill both
pack $w.frmTxt -side top -fill x
pack $w.frmBtn -side top -fill x
set fList [ScrolledWindow $w.frmCanv.f -background $color(bg)]
set list [ListBox $fList.list -font $font(normal)\
-relief sunken -borderwidth 1 -width 1 -height 1 -highlightthickness 1\
-background $color(editBg) -selectbackground $color(selectbg)]
pack $list -side left -fill both -expand yes
$fList setwidget $list
pack $fList -side left -fill both -expand yes
set fText [ScrolledWindow $w.frmCanv.f1 -background $color(bg)]
set text [supertext::text $fText.txtTemplate -width 5 -height 5 -yscrollcommand "$w.frmCanv.yScrText set" \
-wrap none -state disable -background $color(editBg) -foreground $color(editFg)\
-selectborderwidth 0 -selectbackground $color(selectbg)]
$fText setwidget $text
pack $fText -side left -fill both -expand 1
#pack $text -side left -fill both -expand 1
#return
## SPLIT BAR ##
pane::create $fList $fText
label $w.frmTxt.lblFile -text [::msgcat::mc "Input file name"] -font $font(normal)
entry $w.frmTxt.entFile
pack $w.frmTxt.lblFile $w.frmTxt.entFile -side left -padx 2
pack $w.frmTxt.entFile -side left -padx 1 -fill x -expand true
$w.frmTxt.entFile insert 0 "name.tex"
button $w.frmBtn.btnOk -text [::msgcat::mc "Create"] -relief groove -font $font(normal) -command {
set file [.template.frmTxt.entFile get]
file copy -force $tmpl [file join $dir(current) $file]
EditFile [file join $dir(current) $file]
destroy .template
}
button $w.frmBtn.btnCancel -text [::msgcat::mc "Close"] -command "destroy $w" -relief groove -font $font(normal)
pack $w.frmBtn.btnOk $w.frmBtn.btnCancel -padx 2 -pady 2 -fill x -side left
bind $w <Escape> "destroy .template"
focus -force $list
$list bindImage <ButtonRelease-1> "ReadTemplateDescr [$list selection get]"
$list bindText <ButtonRelease-1> "ReadTemplateDescr [$list selection get]"
bind $list.c <Button-4> "$list yview scroll -3 units"
bind $list.c <Button-5> "$list yview scroll 3 units"
bind $list.c <Shift-Button-4> "$list xview scroll -2 units"
bind $list.c <Shift-Button-5> "$list xview scroll 2 units"
GetTemplateList $list
}
proc GetTemplateList {list} {
global dir
set ind 0
foreach file [lsort [glob -nocomplain [file join $dir(tmpl) *.tex]]] {
if {[file isdirectory $file] == 0} {
#$list insert end $file
$list insert end tmpl_$ind -text [file tail $file] \
-image [Bitmap::get [file join $dir(img) tex_tmpl.gif]] \
-data $file
#$list insert end [file tail $file]
#ReadTemplate $file $text
incr ind
}
}
foreach file [lsort [glob -nocomplain [file join $dir(work_tmpl) *.tex]]] {
if {[file isdirectory $file] == 0} {
$list insert end tmpl_$ind -text [file tail $file] \
-image [Bitmap::get [file join $dir(img) tex_tmpl.gif]] \
-data $file
incr ind
#$list insert end $file
#$list insert end [file tail $file]
#ReadTemplate $file $text
}
}
#catch {cd ..}
}
proc ReadTemplateDescr {node} {
global dir tmpl
set text .template.frmCanv.f1.txtTemplate
$text configure -state normal
$text delete 0.0 end
.template.frmCanv.f.list selection set $node
#$w select set anchor [$w nearest $y]
#set file [$w get [$w curselection]]
set file [.template.frmCanv.f.list itemcget $node -data]
set tmpl $file
set fHandle [open $file]
fconfigure $fHandle -encoding koi8-r
while {[gets $fHandle line]>=0} {
if {[string range [string trim $line] 0 0] != "%"} {return}
$text insert end "$line\n"
}
close $fHandle
$text configure -state disable
}

118
lib/modules/tex.tcl Executable file
View File

@@ -0,0 +1,118 @@
###########################################################
# Tcl/Tk Project Manager #
# version 0.0.1 #
# TCL highlight file #
# Copyright (c) "CONERO lab", 2001, http://conero.lrn.ru #
# Author: Sergey Kalinin (aka BanZaj) banzaj@lrn.ru #
###########################################################
proc LoadTag {text} {
global font color
$text tag configure bold -font $font(bold)
$text tag configure operator -foreground $color(operator)
$text tag configure param -foreground $color(param)
$text tag configure subParam -foreground $color(subParam)
$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 brace -foreground $color(brace)
$text tag configure percent -foreground $color(percent)
$text tag configure bindKey -foreground $color(bindKey)
$text tag configure lightBracket -background $color(braceBG) -foreground $color(braceFG)
}
proc HighLightTEX {text line lineNumber node} {
global font tree color nb
set startIndex 0
set keyWord [info commands]
# for OOP extention
foreach n {class method attribute constructor destructor invariant attribute binding new delete} {
lappend keyWord $n
}
set startPos 0
set workLine $line
regexp -nocase -all -- {(\\)([a-zA-Z])*} string match v1 v2
while {$workLine != ""} {
if {[regexp -nocase -all {(\\)([a-zA-Z])*} $workLine a b c]} {
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 operator $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
}
}
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 [expr $startPos +1]
incr end [expr $startPos - 1]
$text tag add param $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 [expr $startPos + 1]
incr end [expr $startPos - 1]
$text tag add subParam $lineNumber.$start $lineNumber.$end
set startPos $end
} else {
break
}
}
# add comment #
set workLine [$text get $lineNumber.0 $lineNumber.end]
if {[regexp -indices "(^|\t|;| )%" $workLine pos]} {
set cur [lindex $pos 1]
$text tag add comments $lineNumber.$cur $lineNumber.end
return 0
} else {
$text tag remove comments $lineNumber.0 $lineNumber.end
return 0
}
####################
}

181
lib/modules/tree.tcl Executable file
View File

@@ -0,0 +1,181 @@
######################################################
# TkTeXEditor
# Distributed under GNU Public License
# Author: Sergey Kalinin (BanZaj) banzaj@lrn.ru
# Copyright (c) "CONERO lab", 2002, http://conero.lrn.ru
######################################################
######################################################
# #
# Working with trees (insert\update\deleted) nodes #
# #
######################################################
## PROJECTS & FILE TREE ##
proc InsertTreeNode {file dirName} {
global tree font dir
set dot "_"
set name [file rootname $file]
set ext [string range [file extension $file] 1 end]
regsub -all -nocase -- {/| |\.} $dirName $dot nodeEnd
regsub -all -nocase -- { |\.} $name $dot name
set subNode "$nodeEnd$dot$name$dot$ext"
if {[$tree exists $subNode] == 1} {
return $subNode
}
$tree insert end root $subNode -text $file \
-data [file join $dirName $file] -open 1\
-image [Bitmap::get [file join $dir(img) tex.gif]]\
-font $font(normal)
$tree configure -redraw 1
return $subNode
}
## INSERT NODE INTO FILES TREE FOR INCLUDED FILES
proc InsertTreeSubNode {file rootNode dirName} {
global tree font dir files
set dot "_"
set name [file rootname $file]
set ext [string range [file extension $file] 1 end]
if {$ext == ""} {
#puts "$file - <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
set ext "tex"
set file $file.$ext
#puts $file
}
regsub -all -nocase -- {/| |\.} $dirName $dot nodeEnd
regsub -all -nocase -- { |\.} $name $dot name
set subNode "$nodeEnd$dot$name$dot$ext"
#set subNode "$nodeEnd$dot$ext"
#puts "file - $file\n"
#puts "dirName - $dirName\n"
#puts "rootNode - $rootNode\n"
#puts "nodeEnd - $nodeEnd\n"
#puts "name - $name\n"
#puts "subnode - $subNode\n"
if {[$tree exists $subNode] == 1} {
if {[$tree parent $subNode] == "root"} {
$tree delete $subNode
} else {
return
}
}
$tree insert end $rootNode $subNode -text $file \
-data [file join $dirName $file] -open 1\
-image [Bitmap::get [file join $dir(img) tex.gif]]\
-font $font(normal)
$tree configure -redraw 1
return $subNode
}
## DOCUMENT STRUCTURE TREE ##
proc InsertNode {node parentNode text image lineNumber} {
global treeStruct font dir
set dot "_"
$treeStruct insert end $parentNode $node -text [string trimleft $text "\*\{"] \
-data " $lineNumber$dot$text" -open 1\
-font $font(normal)\
-image [Bitmap::get [file join $dir(img) $image.gif]]
$treeStruct configure -redraw 1
#return $subNode
}
## TREE ONE CLICKING PROCEDURE ##
proc TreeOneClick {node} {
global dir nb tree activeFile status files
$tree selection set $node
set activeFile $node
set file [$tree itemcget $node -data]
#puts "TreeOneClick - $file";# debug
if {[file exists $file] == 0} {
set answer [tk_messageBox -message "$file [::msgcat::mc "File not found"]"\
-type ok -icon warning -title [::msgcat::mc "Warning"]]
case $answer {
ok {return}
}
}
$status(fileAttr) configure -text [FileAttr [$tree itemcget $node -data]]
#$status(encode) configure -text "[lindex $files($activeFile) 2]"
PageRaise $node
puts "$node\nnodes - [$tree nodes $node]"
}
proc TreeStructOneClick {node} {
global dir nb treeStruct activeFile status files ver release
$treeStruct selection set $node
set findString [$treeStruct itemcget $node -data]
set star [string range $findString [expr [string first "_" $findString] + 1] [expr [string first "_" $findString] + 1]]
set lineNumber [string range $findString 0 [expr [string first "_" $findString]-1]]
set str [string range $node 0 [expr [string first "_" $node]-1]]
if {$star == "\*"} {
set findString [string range $findString [expr [string first "_" $findString]+2] end]
set findString "$str\*$findString\}"
} else {
set findString [string range $findString [expr [string first "_" $findString]+1] end]
set findString "$str\{$findString\}"
}
#$treeStruct selection get $node
set text "$nb.f$activeFile.f.text"
wm title . "TkLaTeXEditor $ver$release - [lindex $files($activeFile) 0]"
FindProc $text $findString $node
$status(pos) configure -text [$text index insert];# cursor position
}
proc TreeDoubleClick {} {
}
proc NodeInsert {file} {
global tree font dir files
set dot "_"
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
set dirName [file dirname $file]
# <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
set name [file rootname $file]
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
set ext [string range [file extension $file] 1 end]
if {$ext == ""} {
#puts "$file - <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
set ext "tex"
set file $file.$ext
#puts $file
}
regsub -all -nocase -- {/| |\.} $dirName $dot nodeEnd
regsub -all -nocase -- { |\.} $name $dot name
if {} {
}
set subNode "$nodeEnd$dot$name$dot$ext"
#set subNode "$nodeEnd$dot$ext"
#puts "file - $file\n"
#puts "dirName - $dirName\n"
#puts "rootNode - $rootNode\n"
#puts "nodeEnd - $nodeEnd\n"
#puts "name - $name\n"
#puts "subnode - $subNode\n"
if {[$tree exists $subNode] == 1} {
if {[$tree parent $subNode] == "root"} {
$tree delete $subNode
} else {
return
}
}
$tree insert end $rootNode $subNode -text $file \
-data [file join $dirName $file] -open 1\
-image [Bitmap::get [file join $dir(img) tex.gif]]\
-font $font(normal)
$tree configure -redraw 1
return $subNode
}