summaryrefslogtreecommitdiff
path: root/Build/source/texk
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2012-12-16 00:59:24 +0000
committerKarl Berry <karl@freefriends.org>2012-12-16 00:59:24 +0000
commit78b57f12e537918f0e6f9f9a1d8d0017cb6c86ba (patch)
treeab61d31e41fc4a884b118c2713657a31da0eea3c /Build/source/texk
parent53c4b8c53ed95a842aac0efbedd7dc0a55ffa511 (diff)
consolidate texdoctk files in new directory (uninstalled just for the moment)
git-svn-id: svn://tug.org/texlive/trunk@28542 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk')
-rw-r--r--Build/source/texk/tetex/README.texdoctk298
-rw-r--r--Build/source/texk/texlive/linked_scripts/Makefile.am2
-rw-r--r--Build/source/texk/texlive/linked_scripts/Makefile.in2
-rw-r--r--Build/source/texk/texlive/linked_scripts/tetex/texdoctk.1217
-rwxr-xr-xBuild/source/texk/texlive/linked_scripts/tetex/texdoctk.pl1857
5 files changed, 0 insertions, 2376 deletions
diff --git a/Build/source/texk/tetex/README.texdoctk b/Build/source/texk/tetex/README.texdoctk
deleted file mode 100644
index 54217cb61ce..00000000000
--- a/Build/source/texk/tetex/README.texdoctk
+++ /dev/null
@@ -1,298 +0,0 @@
- texdoctk v.0.5.3
-
-texdoctk is a Perl/Tk-based frontend for easy access of package documentation
-for the TeX typesetting system on Unix platforms. It includes the following
-files:
-
- texdoctk - the program source
- texdoctk.dat - the database containing the information about the
- accessible documentation files for teTeX-texmf
- texdocrc.defaults - the system-wide default specification for viewer
- and printer settings
- texdoctk.1 - manpage
- README.texdoctk - this file
-The current version is 0.6.0.
-
-REQUIREMENTS
-The program is written in Perl/Tk; it requires Perl 5 and Perl/Tk 8.x. It is
-known to run with Perl 5.004_04 or higher and PerlTk 800.015.
-The database file texdoctk.dat is made for the teTeX distribution.
-Note that the program is *not* a viewer, but an interface to access a document
-with the appropriate viewer. Thus, you need to have appropriate viewers for
-the different formats to actually read the files. Documentations are available
-as .dvi, .ps, .pdf, .html or plain text; some packages are only documented in
-the .sty files. For plain text files (.txt, .sty etc.), texdoctk's own text
-viewer can be used (default). If a document format is not known, texdoctk
-will by default assume that it is plain text and use the text file viewer;
-this behaviour can be switched off in the Settings menu.
-If you want to print the documentations, you will need converters to turn
-non-PS files into PostScript. Here are some suggestions:
-dvi->ps: dvips (is part of teTeX)
- http://www.radicaleye.com/dvips.html
-pdf->ps: pdf2ps
- http://www.cs.wisc.edu/~ghost
- Acrobat Reader
- http://www.adobe.com
-html->ps: html2ps
- http://user.it.uu.se/~jan/html2ps.html
-plain text->ps: a2ps
- http://www-inf.enst.fr/~demaille/a2ps/
-To increase the font size automatically for high-resolution screen, the program
-xwininfo is used; texdoctk will work without as well, though.
-
-INSTALLATION
-The program texdoctk can be copied into any directory where programs are stored
-on your system, e.g. into /usr/local/bin or, probably more adequate, into
-/usr/local/teTeX/bin. It assumes that you have the env command in /usr/bin/
-available to determine the location of the Perl executable; therefore, you may
-need to change the first line of the code if this is not the case for your
-system or if for some reason your Perl executable is not called "perl"; you
-will also have to change the perl call in the sub viewslc as well.
-The database file texdoctk.dat and the configuration file texdocrc.defaults
-must then be put into a subdirectory of the main texmf directory called
-texdoctk. If you want to include information for your local system,
-generate a file texdoctk-local.dat. Make sure to run texhash after
-installation. See the manpage for more info.
-Set the defaults in texdocrc.defaults according to your system; you can
-replace the settings which are specified in the shipped file, but do not
-uncomment variables for items which are not available or applicable for you,
-but just leave the value empty by specifying nothing.
-The individual users can define their own preferences by copying the system
-texdocrc.defaults to ~/.texdocrc and assign new values to the items to be
-changed. They can also establish an additional personal database for packages
-they might have installed in their respective $HOME; this database must be
-called texdoctk-pers.dat and reside in $HOMETEXMF/texdoctk/.
-If you meet the requirements concerning the teTeX distribution, I assume that
-the texdoctk.dat file should work without failures; if you have another
-distribution or if your texmf/doc tree is somehow modified, it may happen that
-a file is not found in spite of the program trying to find it elsewhere. You
-will have to edit the file then, but make sure to keep the right format for
-the entries:
-<package-label>;Short description for listbox (opt. <package-name>);path in doc directory;optional keywords
-(without breaking the line!). If the documentation is included in the .sty file
-instead of a proper documentation file, the optional keywords should start with
--?- directly after the semicolon, where ? is 0, 1, 2 or 3; these are flags
-which indicate in which part of the .sty the instructions are placed. See the
-database file and/or the manpage for more details if necessary.
-The documentation is grouped into 17 categories; the 18th button of the main
-panel is inactive by default. If you have special documents which do not fit
-into any of the categories, you can create a block with a new name in
-texdoctk-local.dat or texdoctk-pers.dat with the respective entries.
-In the settings window you see a checkbox in the html->ps and text->ps
-converter menus for switching on/off output redirect. This is due to the fact
-that some converters do not write their output into a file but to stdout by
-default, so a redirect is needed, e.g.
-a2ps myfile.txt >myfile.ps
-
-DISCLAIMER
-texdoctk v.0.6.0 (Sep 23, 2004) - GUI for TeX documentation access
-Copyright (C) 2000-2004 Thomas Ruedas
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-ACKNOWLEDGEMENTS
-Thomas Esser included the program in the teTeX distribution of TeX and Friends.
-He provided me with informations about changes in the texmf tree and made a
-number of very useful suggestions. He also has coordinated and kept track of
-several additions from other contributors, who fixed bugs and added extensions
-e.g. for use under Win32 systems.
-Reinhard Kotucha and Andreas Werner made very valuable comments and suggestions
-to enhance v.0.3.0, especially about the special treatment of Netscape.
-Reinhard Kotucha also made many useful suggestions and provided patches for
-v.0.4.0; unfortunately, I could not implement all these ideas yet.
-Hans Fredrik Nordhaug made some suggestions, e.g. concerning local and
-personal texmf trees, and reported several bugs in different releases; he also
-contributed fixes/patches.
-Adrian Bunk also has reported a bug and contributed a small manpage for the
-program. He made a Debian GNU/Linux package of texdoctk.
-Michael Sanders reminded me to set the permissions right in the tarball.
-As this is my first application written in PerlTk, it happened that I could
-not solve every problem with my book and the other documentation, but had to
-ask for help on comp.lang.perl.tk. Paul R. Andersen and Stephen O. Lidie have
-given helpful replies and examples for me to try out.
-Fabrice Popineau, and possibly others who I don't know, have provided
-portability to Win32 platforms for use with fpTeX. Staszek Wawrykiewicz helped
-making it ready for use with new TeXLive editions.
-Paul Szabo pointed out a potential security risk related to the way names of
-temporary files are generated.
-
-TO DO LIST
-Unfortunately, I didn't have time to implement all suggestions made by the
-aforementioned people; I hope that I can do that at some later time:
-- widget placement in topic toplevels becomes ugly when the toplevel is
- stretched or shrunk; should be made more elegant
-- raise existing texdoctk window instead of possibly running texdoctk twice;
- (this seems to be difficult, because it requires interprocess communication
- which is kind of unsafe and requires the use of perl -T)
-Possible further long-term enhancements:
-- maybe use Williams Catalogue for automatically building database during
- installation
-- refined printing facility
-
-BUGS
-Netscape error output will be written to stderr even if the quiet mode was set,
-because I didn't manage to start it with the "inline" perl script.
-Widget placement in topic toplevels becomes ugly when the toplevel is stretched
-or shrunk.
-The font in the frame labels of the Settings menu are not forced to the default
-font; this will become visible e.g. at hi-res screens, where the label font is
-not scaled up.
-Please let me know if you find bugs or have suggestions for improvements.
-
-HISTORY/CHANGES
-v.0.6.0 Sep 23, 2004
- - Unknown document formats will be opened as plain text with the text
- file viewer by default; the Settings menu was given a new button to
- toggle this behaviour.
- - Allow for texmf-dist and texmf-doc trees for compliance with teTeX 3
- and TeXLive.
- - Made an attempt to allow for additional personal user's databases to
- be located in $HOMETEXMF, following a long-standing suggestion of
- H.F.Nordhaug. Additional local and personal databases do not need
- to be copies of the system database; instead their contents will be
- appended to the entries of the default list.
- - Fixed a bug with the handling of the local texmf tree reported by
- Sebastian Luque.
- - Updated this README and the manpage.
-v.0.5.2 May 20, 2004
- - Changed the name generation of temporary files to something random
- in order to address a potential security risk pointed out by Paul
- Szabo.
- - Replaced -q option for enabling "quiet" behaviour by -v option for
- enabling "verbose" behaviour; quiet behaviour is now the default and
- was extended to suppress the popup of Warning windows (popmsg level
- 1).
- - Added a possibility to have the Settings menu write the user's
- ~/.texdocrc (older suggestion by R.Kotucha). NB: It is not intended
- to write the system-wide texdocrc.defaults, because it does not set
- $TEXDOCPATH and $LOCALDOCPATH.
- - Button colours are made configurable through the texdocrc files or
- the Settings menu. This is intended to fix a problem H.F.Nordhaug
- reported with users of newer versions of the KDE, where some button
- colours suddenly where messed up. - Validity of entered colours
- is checked if X11's showrgb program is available.
- - DVIPS_OPTS, PDFPS_OPTS and PRINT_OPTS in texdocrc.defaults are now
- obsolete, but still supported. It seemed more reasonable to treat
- the contents of DVIPS_CONV, PDFPS_CONV and PRINT_CMD as command lines
- (which actually would have already been possible all the time). The
- same is true for the viewer variables.
- - Command line options can now be grouped (i.e. -av instead of -a -v).
- - Cursor changes from arrow to watch in some tasks, to indicate a
- process which takes a bit of time.
- - fixed some glitches in databases: semicolons at the end of the
- pdfTeX-related entries; corrected description of ltxtable (hint by
- Rolf Niepraschk) and changed its position; corrected description of
- AMSguide (AMS TeX instead of AMS LaTeX) (hint by H.F.Nordhaug)
- - several additions by other contributors, for instance support for
- Win32 systems
-v.0.5.1 April 21, 2001
- - Enhanced right-button search function so that compressed doc files
- are also found.
- - Fixed a bug in the documentation finding subroutine reported by H.F.
- Nordhaug: the compression determination block in sub finddoc was
- broken.
- - Improved treatment of entering an empty string in the search:
- this is now explicitly treated as demand for display of the whole
- database, instead of search for a null string.
- - Automatic selection of list item in listbox if it contains only one
- element; this will frequently happen in search results. In this
- context, the autoview flag (option -a) has been introduced in the
- texdocrc.defaults and the Settings menu: if it is chosen, the
- appropriate viewer will be started automatically in the case of
- one-item listboxes.
- - Made <Ctrl-q>, <Ctrl-s>, <Ctrl-t> and <Ctrl-h> definitions active in
- all widgets; thus, you don't need to type <Ctrl-q> in the main window
- to quit, for example. Introduced new global key binding for raising
- the main window (<Ctrl-m>).
- - Fixed a braindead typo in the texdoc-*.dat files (too dumb to tell).
- - Some small changes/updates in the Help text; the button and window
- are now named "Help/About".
- - Added an emacs perl-mode directive at the end, mostly for my
- convenience.
-v.0.5.0a April 19, 2001
- - Fixed bug in texdoc-102.dat reported by H.F.Nordhaug: correct path
- for multirow is latex/multirow/multirow.sty (instead of
- latex/misc/multirow.sty, as in texdoc-100.dat)
-v.0.5.0 April 18, 2001
- - For some packages, the only documentation is included in the .sty
- file itself. This documentation is now made accessible by extracting
- the comments/instructions, writing them into a temporary text file
- and calling the text file viewer on it. Thus 38 additional
- documentation files are made accessible now.
- - implementation of a suggestion by Hans Fredrik Nordhaug: contents of
- the local texmf tree ($TEXMFLOCAL) can be included now. Arbitrary
- inclusion of additional private texmf trees is not yet possible,
- though.
- - Two fixes/improvements in the databases by R.Kotucha were made
- (concerning epslatex and the MetaPost tutorial)
- - R.Kotucha suggested the use of the program xwininfo to determine
- screen resolution and switch to a larger font size at hi-res screens.
- He provided a patch for this, which I added after a slight
- adaptation.
- - auto-determination of Perl's path (stolen from some script by Thomas
- Esser, IIRC)
- - If a beta release of teTeX is used, the teTeX-1.0.2 database will be
- used as a default instead of the 1.0.0 database
- - introduced new message type with transient windows
- - fatal error messages if essential config/database files are not found
- - some syntax cosmetics
-v.0.4.0 June 11, 2000
- - implementation of several suggestions by Reinhard Kotucha and
- Andreas Werner:
- * More than 1 document can now be viewed at one time, because the
- viewers now run as background processes. They are not killed when
- texdoctk itself is quit.
- If Netscape is your browser, HTML documents are now loaded into
- an existing Netscape window; no new Netscape will be started. This
- is to be a bit economic with system resources.
- * The Search button resp. <Ctrl-s> now switches on/off the search
- entry widget; this is to avoid that multiple entry widgets come up,
- because that doesn't make much sense.
- * If no TXT_VIEWER is defined, the environment variable $PAGER will
- be used, if defined (but see below).
- - bugs/fixes and suggestions reported by Hans Fredrik Nordhaug:
- * $j for loop in sub srchstr was too short:
- $j<$maxind[$i] --> $j<$maxind[$i]+1
- * misplaced last SRCH in keywords branch of sub srchstr: last SRCH
- had to be put into inner if block
- * added support of zip compression format
- - bug/fix reported by Adrian Bunk:
- * ambiguous use of redirection flag/sign hor html and text->ps
- conversion
- - own text viewer for plain text documentation files; this is now the
- default in the original texdocrc.defaults
- - kpsewhich instead of find is used for rescue file search
- - temporary files generated when printing or possibly decompressing (as
- in Debian) now get different names to prevent overwriting files which
- are still in use
- - main, settings, and help windows made non-resizable
- - suppressed availability of listbox selection to X selection
- - document selection toplevel windows will be raised now instead of
- being opened twice or more times if they are already open
- - uniform font for all text-containing widgets explicitly set; I had
- some weird font configuration when running texdoctk under a CDE
- - environment
-v.0.3.0 March 11, 2000
- - first full public release
- - implementation of some suggestions by Thomas Esser:
- use of kpsewhich, changes in directory and database configuration
- implemented cd to file directory to ensure rendering of graphics
- made viewer message output suppression really quiet
- better layout of help window
-v.0.2 March 7, 2000
- - first public release (preliminary)
-v.0.1 - private trial version, does not exist anymore
-
-AUTHOR
-Thomas Ruedas
-tr@geol.ku.dk
-http://www.geophysik.uni-frankfurt.de/~ruedas/progs.html
diff --git a/Build/source/texk/texlive/linked_scripts/Makefile.am b/Build/source/texk/texlive/linked_scripts/Makefile.am
index f2df72715b9..297f0ddeb3e 100644
--- a/Build/source/texk/texlive/linked_scripts/Makefile.am
+++ b/Build/source/texk/texlive/linked_scripts/Makefile.am
@@ -161,7 +161,6 @@ texmf_dist_other_scripts = \
sty2dtx/sty2dtx.pl \
svn-multi/svn-multi.pl \
tetex/e2pall.pl \
- tetex/texdoctk.pl \
tetex/updmap.pl \
tetex/updmap-sys.sh \
texdoc/texdoc.tlu \
@@ -217,7 +216,6 @@ dist_man_MANS = \
tetex/rubibtex.1 \
tetex/rumakeindex.1 \
tetex/texconfig.1 \
- tetex/texdoctk.1 \
tetex/texlinks.1 \
tetex/updmap.1 \
tetex/updmap.cfg.5 \
diff --git a/Build/source/texk/texlive/linked_scripts/Makefile.in b/Build/source/texk/texlive/linked_scripts/Makefile.in
index b6c40a624a2..601d42af7e8 100644
--- a/Build/source/texk/texlive/linked_scripts/Makefile.in
+++ b/Build/source/texk/texlive/linked_scripts/Makefile.in
@@ -347,7 +347,6 @@ texmf_dist_other_scripts = \
sty2dtx/sty2dtx.pl \
svn-multi/svn-multi.pl \
tetex/e2pall.pl \
- tetex/texdoctk.pl \
tetex/updmap.pl \
tetex/updmap-sys.sh \
texdoc/texdoc.tlu \
@@ -392,7 +391,6 @@ dist_man_MANS = \
tetex/rubibtex.1 \
tetex/rumakeindex.1 \
tetex/texconfig.1 \
- tetex/texdoctk.1 \
tetex/texlinks.1 \
tetex/updmap.1 \
tetex/updmap.cfg.5 \
diff --git a/Build/source/texk/texlive/linked_scripts/tetex/texdoctk.1 b/Build/source/texk/texlive/linked_scripts/tetex/texdoctk.1
deleted file mode 100644
index e7aebb7098a..00000000000
--- a/Build/source/texk/texlive/linked_scripts/tetex/texdoctk.1
+++ /dev/null
@@ -1,217 +0,0 @@
-.TH TEXDOCTK 1
-.SH NAME
-texdoctk \- GUI for easier access of TeX package and program documentations
-.SH SYNOPSIS
-.B texdoctk
--[aq]
-.SH "DESCRIPTION"
-.B texdoctk
-is a GUI for easier access to a large part of the vast amount
-of package and program documentations and tutorials for TeX and its
-different derivatives (mainly LaTeX). It is optimized and included in
-the teTeX and fpTeX distributions and also available with TeXLive.
-.PP
-The documentation is grouped into 17 categories; the 18th button of the main
-panel is inactive by default and intended for use with local additions (see
-section
-.B CONFIGURATION
-below).
-.PP
-In the settings window you see a checkbox in the html->ps and text->ps
-converter menus for switching on/off output redirect. This is due to the fact
-that some converters do not write their output into a file but to stdout by
-default, so a redirect is needed, e.g.
-.PP
-a2ps myfile.txt >myfile.ps
-.SH "OPTIONS"
-.TP
-.I "\-v"
-verbose: enable some viewer messages which are otherwise sent to stderr,
-as well as some warning popup windows. This can also be set in a
-configuration file.
-.TP
-.I "\-a"
-autoview: autostart viewer if a listbox contains only one item (this will
-frequently happen in search results). This can also be set in a configuration
-file.
-.SH "CONFIGURATION"
-.PP
-The configuration is controlled by the system default configuration file
-($TEXMFMAIN)/texdoctk/texdocrc.defaults, most of whose entries can though be
-overridden by the users' own optional ~/.texdocrc files and/or command line
-options.
-.SS The Settings menu and configuration files
-.PP
-The Settings menu is used to change the user-definable settings of \fBtexdoctk\fP
-for the duration of the program call or as new defaults. The latter case is
-the purpose of the Save button, which generates or rewrites the user's own
-~/.texdocrc file. The system defaults cannot be edited with the Settings
-menu.
-.TP
-Paths
-The TEXMF-type paths on the system are reported, and the user can specify the
-name of the subdirectory of $HOMETEXMF, where the personal documentation is
-stored.
-.TP
-General viewer behaviour
-
-.I Suppress error messages
-toggle verbose mode (see option -v); default is off.
-
-.I Autostart viewer for one-item listboxes
-if a listbox contains only one item (see option -a)
-
-.I Use text viewer for unknown file format
-i.e. treat the file as plain text. \fBtexdoctk\fP should recognize the usual file
-formats and also relate names like README to plain text, but some docs may have
-freely invented names. Default is on; if switched off, trying to view such
-files will raise an error. The switch does not influence printing: unrecognized
-formats cannot be printed.
-
-.I Change viewer colours
-using either RGB triplets in the format #rrggbb or the standardized names.
-.TP
-DVI/PostScript/PDF/HTML/Plain text
-For text files, \fBtexdoctk\fP provides an own viewer. If this viewer is disabled,
-but no alternative viewer is specified, \fBtexdoctk\fP tries to read the content
-of the environment variable $PAGER.
-
-If you want to print the documentations, you will need converters to turn
-non-PS files into PostScript. Here are some suggestions:
-
-\& dvi->ps:
-dvips (is part of teTeX) (http://www.radicaleye.com/dvips.html)
-
-\& pdf->ps:
-pdf2ps (http://www.cs.wisc.edu/~ghost) or
-Acrobat Reader (http://www.adobe.com)
-
-\& html->ps: html2ps (http://user.it.uu.se/~jan/html2ps.html)
-
-\& plain text->ps: a2ps (http://www-inf.enst.fr/~demaille/a2ps/)
-
-The html->ps and text->ps converter menus for switching on/off output redirect.
-This is due to the fact that some converters do not write their output into a
-file but to stdout by default, so a redirect is needed, e.g.
-.B a2ps myfile.txt >myfile.ps
-.PP
-The system-wide configuration file is ($TEXMFMAIN)/texdoctk/texdocrc.defaults
-and should only be writable by the administrator of the installation using any
-text editor. The optional user configuration file is ~/.texdocrc and can
-override all but those system settings which affect the installation as a
-whole. The preferred way of changing it is through the Settings menu.
-.SS The databases
-\fBtexdoctk\fP comes with a default database file ($TEXMFMAIN)/texdoctk/texdoctk.dat
-with a special format. It is divided into 17 sections corresponding to the
-17 buttons that are active by default. Each section begins with a line
-
-@\fIsection_name\fP
-
-where
-.I section_name
-is the text as it appears in the button. This title is
-followed by the descriptive entries for each documentation, which have this
-format:
-
-\fIpackage-label\fP;Short description for listbox (opt. \fIpackage-name\fP);path in doc directory;optional keywords
-
-(without breaking the line!). Comments (initiated with a #) and empty lines
-are ignored by the program. The second field is the text displayed in the
-selection listboxes of \fBtexdoctk\fP, and you will usually want to mention the name
-of the package in parens along with it; the first field is a \fBunique\fP label
-for the package for internal use of the program which will usually be chosen
-identical to the package name, but can be different if there is more than one
-documentation file coming with a package.
-.PP
-The administrator will probably install additional packages in the local texmf
-tree. The corresponding documentation can be made accessible by an additional
-database $TEXMFLOCAL/texdoctk/texdoctk-local.dat. Furthermore, individual
-users possibly install additional packages in an texmf subdirectory of their
-$HOME, for which they can make an individual database themselves as
-$TEXMFHOME/texdoctk/texdoctk-pers.dat. After creating such files, texhash
-must be executed.
-.PP
-Both types of databases must have the same structure as the system database,
-although they need (and should) not include all its sections if there are no
-additional entries. For example, if the the package
-.I foo
-is added to the local tree such that its documentation file is
-($TEXMFLOCAL)/doc/latex/foo/foo.dvi and it is decided that it fits best into
-the existing category Graphics, texdoctk-local.dat would look like this:
-
-@Graphics
-.br
-foo;Create bells and whistles (foo);latex/foo/foo.dvi;decoration
-
-The entry for
-.I foo
-will then be appended to the list of entries in the Graphics category. The 18th
-button can be activated in the same way, but using a new category name;
-possible entries at the beginning of the database which have not been assigned
-to a category will be assigned to the default Miscellaneous, making the 18th
-button active with that label. Note that you cannot have more than 18
-categories; if there are more, only the one defined last will appear and be
-used.
-.PP
-If the documentation is included in the .sty file instead of a proper
-documentation file, the optional keywords should start with
--?- directly after the semicolon, where ? is 0, 1, 2 or 3; these are flags
-which indicate in which part of the .sty the instructions are placed and
-should help \fBtexdoctk\fP to extract the documentation from the style and present
-it without the code, which would normally be of little use.
-.TP
-0
-no specific place, scattered between the code
-.TP
-1
-at end, behind \\endinput; some .sty files have well-organized documentation
-behind the end of the actual code, where TeX doesn't see it upon compilation
-.TP
-2
-at beginning, terminated by %%%%%%; in some other cases, some usage information
-is at the beginning of the .sty as a comment terminated by a line full of %
-.TP
-3
-as 2, but with a blank line as termination
-.PP
-See the system database for plenty of examples.
-
-.SH "FILES"
-.PP
-\& $TEXMFMAIN/texdoctk/texdocrc.defaults
-system-wide configuration file
-.PP
-\& ~/.texdocrc
-(optional) personal configuration file; can also be created with the Settings menu
-.PP
-\& $TEXMFMAIN/texdoctk/texdoctk.dat
-default database file for documentation files of the distribution
-.PP
-\& $TEXMFLOCAL/texdoctk/texdoctk-local.dat
-(optional) local database file for documentation files
-.PP
-\& $TEXMFHOME/texdoctk/texdoctk-pers.dat
-(optional) personal database file of individual users for documentation files
-.SH BUGS
-Widget placement in topic toplevels becomes ugly when the toplevel is stretched
-or shrunk.
-.PP
-The font in the frame labels of the Settings menu are not forced to the default
-font; this will become visible e.g. at hi-res screens, where the label font is
-not scaled up.
-.PP
-Netscape and Mozilla error output will be written to stderr even if the quiet
-mode was set.
-.SH AUTHOR
-.B texdoctk
-was written by Thomas Ruedas <tr@geol.ku.dk>.
-.PP
-This manual page was originally written by Adrian Bunk <bunk@fs.tum.de> for
-the Debian GNU/Linux system (but may be used by others). It is now maintained
-by Thomas Ruedas.
-
-.SH COPYRIGHT
-Copyright (C) 2000-2004 Thomas Ruedas
-.br
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/Build/source/texk/texlive/linked_scripts/tetex/texdoctk.pl b/Build/source/texk/texlive/linked_scripts/tetex/texdoctk.pl
deleted file mode 100755
index 36497183e3b..00000000000
--- a/Build/source/texk/texlive/linked_scripts/tetex/texdoctk.pl
+++ /dev/null
@@ -1,1857 +0,0 @@
-#! /usr/bin/env perl
-###############################################################################
-# texdoctk - GUI for TeX documentation access
-# Copyright (C) 2000-2004 Thomas Ruedas
-# Updated in 2010 by Manuel Pegourie-Gonnard
-# This program is provided under the GNU Public License; see the file
-# README.texdoctk for details about requirements, installation, configuration,
-# and the full disclaimer.
-###############################################################################
-my ($version, $date) = ("0.6.1", "2004-11-05");
-use strict;
-use Tk;
-use Getopt::Long;
-Getopt::Long::config('bundling');
-use File::Basename;
-
-BEGIN {
- Win32::SetChildShowWindow(0) if defined &Win32::SetChildShowWindow;
-}
-
-my $IsWin32 = ($^O =~ /MSWin32/i);
-
-if ($IsWin32) {
- require Win32::API;
-# Win32::API->import( qw(
-# &something
-# ));
-}
-
-# initialization of some internal variables
-$|=1;
-my $quiet=1;
-my $autoview;
-my $xfmt_viewer=1,
-my @tdcolors;
-my %butcol;
-my $srchentry;
-my $srchflag=0;
-my $srchtype; # 0 = database, 1 = texdoc
-my $tmpfno;
-# system variables
-my ($texmfmain,$texmfdist,$texmfdoc,$texmflocal,$texmfhome,
- $texdocpath,$distdocpath,$docdocpath,$localdocpath,$homedocpath,
- $datadir,
- $dvi_viewer,$dvips_conv,$ps_viewer,$pdf_viewer,
- $pdfps_conv,$html_viewer,$htmlps_conv,$htmlps_redir,
- $txt_viewer,$txtps_conv,$txtps_redir,$print_cmd);
-
-# defaults: unix values
-my $qq="'";
-my $HomeEnv=$ENV{HOME};
-my $TeXDocRcDefaults="texdocrc.defaults";
-my $TempDir; $TempDir=$ENV{TMPDIR} or $TempDir="/tmp";
-my $CmdConsole="xterm -e ";
-
-if ($IsWin32) {
- $qq = "\"";
- $HomeEnv = $ENV{'USERPROFILE'};
- chomp $HomeEnv;
- $TeXDocRcDefaults = "texdocrc-win32.defaults";
- $TempDir = &GetTempPath;
- $CmdConsole = "cmd /c ";
-}
-
-my $myrc="${HomeEnv}/.texdocrc"; # optional personal settings file
-
-my ($line,@dummy);
-my @tmpfiles;
-# read system-wide defaults from texdocrc.defaults
-my $sysrc=`kpsewhich --progname=texdoctk --format=${qq}other text files${qq} ${TeXDocRcDefaults}`;
-my $database=`kpsewhich --progname=texdoctk --format=${qq}other text files${qq} texdoctk.dat`;
-my $locdatabase=`kpsewhich --progname=texdoctk --format=${qq}other text files${qq} texdoctk-local.dat`;
-my $homedatabase=`kpsewhich --progname=texdoctk --format=${qq}other text files${qq} texdoctk-pers.dat`;
-chomp $locdatabase;
-chomp $homedatabase;
-chomp $sysrc;
-&readrc($sysrc,1);
-@dummy=split("/",$sysrc);
-pop @dummy;
-$datadir=join('/',@dummy);
-# possibly use personal settings instead of defaults
-if (-e $myrc) { &readrc($myrc,2); }
-# command line options
-GetOptions('v'=>\$quiet,'a'=>\$autoview);
-my $special=0;
-my @button;
-$button[17]="Miscellaneous";
-my (@packname,@topic,@doc,@keywords,@maxind,%stydoc);
-# read database file
-my $i=-1;
-my $j;
-open(DATABASE,"$database") || &fatalmsg("Couldn't open database $database.\n");
-while ($line = <DATABASE>) {
- LINETYPE: {
- ($line =~ /^\@/) && do { # category
- ++$i;
- if ($i == $#button) {
- pop @button;
- push @button,(substr($line,1,-1));
- $special=1;
- } else {
- $button[$i]=substr($line,1,-1);
- }
- $j=0;
- last LINETYPE;
- };
- ($line =~ /^(#|$)/) && do { # comment or empty line
- last LINETYPE;
- };
-# list item
- @dummy=split(";",$line);
- $packname[$i][$j]=$dummy[0];
- $topic[$i][$j]=$dummy[1];
- $doc[$i][$j]=$dummy[2];
- $keywords[$i][$j]=$dummy[3];
- if ($doc[$i][$j] =~ /sty$/ && $keywords[$i][$j]) {
- $stydoc{"$doc[$i][$j]"}=substr($keywords[$i][$j],1,1);
- unless ($stydoc{"$doc[$i][$j]"} =~ /^\d$/) {
- $stydoc{"$doc[$i][$j]"}=0;
- }
- }
- $maxind[$i]=$j;
- ++$j;
- };
-}
-close(DATABASE);
-# Read site-local and user's database(s) if it/they exist(s)
-foreach my $dbfile ($locdatabase,$homedatabase) {
- if (-e "$dbfile") {
- open(DATABASE,"$dbfile") ||
- print "Couldn't open additional database $dbfile.\n";
- $i=17; # local/user: if no category is specified in database, add to "Misc"
- while ($line = <DATABASE>) {
- LINETYPE: {
- ($line =~ /^\@/) && do { # category
- $i=&arrindex(@button,substr($line,1,-1));
- if ($i >= $#button) {
- $i=$#button;
- pop @button;
- push @button,(substr($line,1,-1));
- $special=1;
- }
- last LINETYPE;
- };
- ($line =~ /^(#|$)/) && do { # comment or empty line
- last LINETYPE;
- };
-# list item
- @dummy=split(";",$line);
- $j=&arrindex(@{$packname[$i]},$dummy[0]);
- if ($j > $#{$packname[$i]}) {
- $packname[$i][$j]=$dummy[0];
- $topic[$i][$j]=$dummy[1];
- $doc[$i][$j]=$dummy[2];
- $keywords[$i][$j]=$dummy[3];
- if ($doc[$i][$j] =~ /sty$/ && $keywords[$i][$j]) {
- $stydoc{"$doc[$i][$j]"}=substr($keywords[$i][$j],1,1);
- unless ($stydoc{"$doc[$i][$j]"} =~ /^\d$/) {
- $stydoc{"$doc[$i][$j]"}=0;
- }
- }
- $maxind[$i]=$j;
- ++$j;
- }
- };
- }
- close(DATABASE);
- $special=1 if ($i == 17 && $j > 0);
- }
-}
-
-# Tk
-# hash table for toplevel windows; used to avoid multiple calls of same window
-my %tlwins;
-my %buttonlist;
-# create frames for main window: commands on top, frame for buttons below
-my $main=new MainWindow;
-$tlwins{'mainwindow'}{'addr'}=$main;
-$main->resizable(0,0);
-$main->title("TeX Documentation Browser");
-$main->bind('all','<Control-q>'=>\&clean_exit);
-$main->bind('all','<Control-m>'=>sub { $main->raise(); });
-$main->bind('all','<Control-h>'=>\&helptext);
-$main->bind('all','<Control-s>'=>sub { $main->raise(); &mksrch; });
-$main->bind('all','<Control-t>'=>\&settings);
-my $cmdframe=$main->Frame(-background=>"#ffcc99");
-my $buttonframe=$main->Frame;
-$cmdframe->pack(-side=>'top',-fill=>'x');
-$buttonframe->pack(-side=>'bottom');
-# normal cursor
-my $defcursor=$main->cget(-cursor);
-# make buttons for command frame
-my $Qbut=$cmdframe->Button(-text=>'Quit',%butcol,
- -command=>\&clean_exit)->pack(-side=>'left');
-$tlwins{'mainwindow'}{'buttons'}[0]=$Qbut;
-# define common default font for labels and text explicitly
-my $deffont=$Qbut->cget(-font);
-# ensure readability on high-res screens (suggested by R.Kotucha)
-$deffont='Helvetica -16 bold' if &x_resolution > 1200;
-$Qbut->configure(-font=>$deffont);
-$tlwins{'mainwindow'}{'buttons'}[1]=$cmdframe->Button(
- -text=>'Database search',
- -font=>$deffont,%butcol,
- -command=>[\&mksrch, 0]
- )->pack(-side=>'left');
-$tlwins{'mainwindow'}{'buttons'}[2]=$cmdframe->Button(
- -text=>'File search',
- -font=>$deffont,%butcol,
- -command=>[\&mksrch, 1]
- )->pack(-side=>'left');
-$tlwins{'mainwindow'}{'buttons'}[3]=$cmdframe->Button(-text=>'Help/About',
- -font=>$deffont,%butcol,
- -command=>\&helptext
- )->pack(-side=>'right');
-$tlwins{'mainwindow'}{'buttons'}[4]=$cmdframe->Button(-text=>'Settings',
- -font=>$deffont,%butcol,
- -command=>\&settings
- )->pack(-side=>'right');
-# make buttons for category button frame
-my $lbut=0;
-my $l;
-foreach (@button) { $l=length $_; $lbut=$l if ( $l > $lbut) }
-my @catg;
-my ($i2,$i3);
-my $nbutt=scalar @button;
-my $ncols=$nbutt/3-1;
-foreach (0..$ncols) {
- $i=$_;
- $i2=$i+$nbutt/3;
- $i3=$i+2*$nbutt/3;
- $catg[$i]=$buttonframe->Button(-text=>$button[$i],
- -font=>$deffont,%butcol,
- -width=>$lbut,
- -command=>[\&tpslct,$i,\@dummy])->grid
- ($catg[$i2]=$buttonframe->Button(-text=>$button[$i2],
- -font=>$deffont,%butcol,
- -width=>$lbut,
- -command=>[\&tpslct,$i2,\@dummy]),
- $catg[$i3]=$buttonframe->Button(-text=>$button[$i3],
- -font=>$deffont,%butcol,
- -width=>$lbut,
- -command=>[\&tpslct,$i3,\@dummy]));
-}
-# disable last button (lower right) if no local specials are found in list
-my $ncat;
-if ($special == 0) {
- $catg[$#button]->configure(-state=>'disabled');
- $ncat=$nbutt-1;
-} else {
- $ncat=$nbutt;
-}
-for ($i=0,$j=5; $i<@catg; ++$i,++$j) {
- $tlwins{'mainwindow'}{'buttons'}[$j]=$catg[$i];
-}
-MainLoop;
-
-########## SUBROUTINES ########################################################
-# toplevel for selecting a topic of a category for viewing or printing
-sub tpslct {
- my($opt,@srchitems)=@_;
- my (@lbitems,@lbdocs,$dspselect,$docselect,$wtitle);
- if ($opt >= 0) {
-# main window buttons
-# see if toplevel window is already there
- if (Exists($tlwins{$opt}{'addr'})) {
- $tlwins{$opt}{'addr'}->deiconify();
- $tlwins{$opt}{'addr'}->raise();
- return;
- }
- for ($j=0; $j <= $maxind[$opt]; ++$j) {
- push @lbitems,$topic[$opt][$j];
- push @lbdocs,$doc[$opt][$j];
- }
- $wtitle=$button[$opt];
- } else {
-# search results
- my $spec_wtitle=shift @srchitems;
- for ($j=0; $j < $#srchitems; $j+=2) {
- my $k=$j+1;
- push @lbitems,$topic[$srchitems[$j]][$srchitems[$k]];
- push @lbdocs,$doc[$srchitems[$j]][$srchitems[$k]];
- }
- $wtitle = ($srchtype ? "File" : "Database")
- . " search results for $spec_wtitle";
- }
-# toplevel window of category $opt with two frames
- my $tpwin=$main->Toplevel(-title=>$wtitle);
- $tlwins{$opt}{'addr'}=$tpwin;
- my $tpdsp=$tpwin->Frame(-relief=>'groove')->pack(-side=>'top');
- my $tpslc=$tpwin->Frame()->pack(-side=>'top');
-# selection frame with listbox and buttons
-# label for listbox
- my $tplabel=$tpslc->Label(-text=>($srchtype ? "Files" : "Topics"),
- -font=>$deffont)->pack(-anchor=>'w',
- -side=>'top');
-# listbox with optional scrollbar
- my $tplist=$tpslc->Scrolled("Listbox",
- -font=>$deffont,
- -scrollbars=>'osoe',
-# -height=>0,
- -width=>0,
- -selectmode=>'single',
- -exportselection=>0,
- -cursor=>'hand2')->pack(-side=>'left',
- -fill=>'y',
- -expand=>1);
- $tplist->insert('end',@lbitems); # fill topics into listbox
-# buttons frame
- my $tpbframe=$tpslc->Frame(-borderwidth=>8);
- $tpbframe->pack(-side=>'right');
-# make buttons for command frame
- my $n_buttons = 0;
- $tlwins{$opt}{'buttons'}[$n_buttons++]=
- $tpbframe->Button(-text=>'View',
- -font=>$deffont,%butcol,
- -command=>sub{ &viewslc($docselect,$tpbframe);},
- -width=>6)->pack(-side=>'top');
- if (! $IsWin32) {
- $tlwins{$opt}{'buttons'}[$n_buttons++]=
- $tpbframe->Button(-text=>'Print',
- -font=>$deffont,%butcol,
- -command=>sub{ &prtslc($docselect,$tpbframe);},
- -width=>6)->pack(-side=>'top');
- }
- $tlwins{$opt}{'buttons'}[$n_buttons++]=
- $tpbframe->Button(-text=>'Cancel',
- -font=>$deffont,%butcol,
- -command=>sub{ destroy $tpwin; undef $tlwins{$opt};},
- -width=>6)->pack(-side=>'bottom');
-# if only 1 item is in the list (most likely in search results), select it
- if (scalar @lbitems == 1) {
- $tplist->selectionSet(0);
- $dspselect=$lbitems[0];
- $docselect=$lbdocs[0];
- &viewslc($docselect,$tpbframe)
- if ($autoview && $wtitle =~ /^Search results/);
- }
-# display frame
- my $dsplabel=$tpdsp->Label(-text=>'Selection:',
- -font=>$deffont)->pack(-anchor=>'w',,
- -fill=>'x',
- -side=>'left');
- my $dspslc=$tpdsp->Label(-textvariable=>\$dspselect,
- -font=>$deffont,
- -borderwidth=>2)->pack(-anchor=>'w',
- -fill=>'x',
- -side=>'right');
-# handle selection; only one selection possible
- $tplist->bind('<Button-1>'=>sub{my ($slctind)=$tplist->curselection();
- $dspselect=$lbitems[$slctind];
- $docselect=$lbdocs[$slctind];});
-# key bindings
- $tplist->bind('<Double-Button-1>'=>sub{
- &viewslc($docselect,$tpbframe);});
- $tpwin->bind('<Control-v>'=>sub{
- &viewslc($docselect,$tpbframe);});
- $tpwin->bind('<Control-p>'=>sub{
- &prtslc($docselect,$tpbframe);});
- $tpwin->bind('<Control-c>'=>sub{destroy $tpwin; undef $tlwins{$opt};});
- $tplist->bind('<Button-3>'=>sub{
- if ($docselect) {
- &showpath($docselect,$tpbframe);
- } else {
- &popmsg(2,"No selection;\nuse left mouse button.",$tpbframe);
- }});
-}
-
-# view document selected in listbox
-sub viewslc {
- my($slc,$parframe)=@_;
- my $viewer;
- my $itype=-1;
- my $browser=0;
- my $styflag=0;
- unless (defined $slc) {
- &popmsg(2,"No selection was made.",$parframe);
- return;
- }
- $parframe->configure(-cursor=>'watch');
- chomp $slc;
- my @dummy=split('\.',$slc);
- DOC_FORMAT: { # determine document type
- ($dummy[-1] =~ /dvi/) && do { $viewer=$dvi_viewer; last DOC_FORMAT; };
- ($dummy[-1] =~ /ps/) && do { $viewer=$ps_viewer; last DOC_FORMAT; };
- ($dummy[-1] =~ /pdf/) && do { $viewer=$pdf_viewer; last DOC_FORMAT; };
- ($dummy[-1] =~ /txt/ || $dummy[-1] =~ /faq$/) && do {
- $viewer=($txt_viewer eq "TDK_OWN" ||
- $txt_viewer =~ /xterm/) ?
- $txt_viewer : "${CmdConsole} $txt_viewer";
- last DOC_FORMAT;
- };
- ($dummy[-1] =~ /README/i || $dummy[-2] =~ /\/README$/i) && do {
- $viewer=($txt_viewer eq "TDK_OWN" ||
- $txt_viewer =~ /xterm/) ?
- $txt_viewer : "${CmdConsole} $txt_viewer";
- last DOC_FORMAT;
- };
- ($dummy[-1] =~ /htm/) && do {
- $viewer=$html_viewer;
- if ($html_viewer =~ /netscape/i) { # check if Netscape is open
- my $lockfile="${HomeEnv}/.netscape/lock";
- $browser=1 if (-e $lockfile || -l $lockfile);
- } elsif ($html_viewer =~ /mozilla/i) { # check if Mozilla is open
- my $mozcheck=
- `mozilla -remote 'openFile($texmfmain/doc/index.html)'`;
- $browser=1 unless ($?);
- }
- last DOC_FORMAT;
- };
-# some packages have no normal documentation but useful info in the .sty
- ($dummy[-1] =~ /sty$/) && do {
- $viewer=($txt_viewer eq "TDK_OWN" ||
- $txt_viewer =~ /xterm/) ?
- $txt_viewer : "${CmdConsole} $txt_viewer";
- $slc="../tex/$slc"; # .sty files are in ${tex,local}docpath/../tex/
- $styflag=1;
- last DOC_FORMAT;
- };
- $parframe->configure(-cursor=>$defcursor);
- if ($xfmt_viewer != 1) {
- &popmsg(2,"$dummy[-1]: not a known document format",$parframe);
- return;
- }
- };
- if ($viewer eq "") {
- if ($xfmt_viewer == 1) {
- &popmsg(-1,'Unknown format; assuming plain text.',$parframe);
- $viewer=($txt_viewer eq "TDK_OWN" ||
- $txt_viewer =~ /xterm/) ?
- $txt_viewer : "${CmdConsole} $txt_viewer";
- } else {
- &popmsg(2,"$dummy[-1]: no viewer available/specified for this format",
- $parframe);
- $parframe->configure(-cursor=>$defcursor);
- return;
- }
- }
-# build complete path and start viewer if file exists
- my $slcdoc;
- $slcdoc=&finddoc($slcdoc,$slc,$parframe);
- if ($slcdoc ne "") {
-# change to doc directory in case there are pictures
- my $docpath=substr($slcdoc,0,(rindex($slcdoc,'/',(length $slcdoc))));
- chomp $slcdoc;
- chdir ($docpath);
-# try to get doc out of .sty file
- if ($styflag) {
- &popmsg(-1,'Trying to extract documentation out of .sty file;
-might be cluttered with program comments.',
- $parframe);
- $slcdoc=&stripsty($slcdoc,substr($slc,7));
- }
-# for text files use built-in text viewer if set
- if ($IsWin32) {
- if ($viewer eq "TDK_OWN") {
- &ShellExecute('open', $slcdoc);
- $parframe->configure(-cursor=>$defcursor);
- return;
- }
- else {
- system("$viewer $slcdoc");
- }
- }
- else {
- if ($viewer eq "TDK_OWN") {
- &textview($slcdoc);
- $parframe->configure(-cursor=>$defcursor);
- return;
- }
- if ($quiet == 0) { # show messages
- if ($browser == 0) { # normal viewers or new Netscape/Mozilla
- system("$viewer $slcdoc &");
- } else { # open doc in existing Netscape/Mozilla window
- system("$viewer -remote 'openFile($slcdoc)' &");
- &popmsg(-1,"Opening document in existing $viewer window.",
- $parframe);
- }
- } else { # viewer messages written to /dev/null instead of terminal
- if ($browser == 0) { # normal viewers or new Netscape/Mozilla
- system("perl -we 'use strict; \
-my \$dump=\"\"; \
-open(NULL,\">/dev/null\"); \
-open (VIEWQ,\"$viewer $slcdoc |\"); \
-while (\$dump=<VIEWQ>) { print NULL \$dump; } \
-close(VIEWQ); \
-close(NULL);' &");
- } else { # open doc in existing window (Netscape or Mozilla)
- # not quiet; I didn't get an inline perl call like in
- # the other branch working
- system("$viewer -remote 'openFile($slcdoc)' &");
- &popmsg(-1,"Opening document in existing $viewer window.",
- $parframe);
- }
- }
- }
- }
- $parframe->configure(-cursor=>$defcursor);
-}
-
-# Tk widget for text document
-sub textview {
- my($txtfile)=@_;
-# see if toplevel window with this file is already there
- if (Exists($tlwins{$txtfile}{'addr'})) {
- $tlwins{$txtfile}{'addr'}->deiconify();
- $tlwins{$txtfile}{'addr'}->raise();
- return;
- }
- my $tfv_tk=$main->Toplevel(-title=>"Text file viewer");
- $tfv_tk->resizable(0,1);
- $tlwins{$txtfile}{'addr'}=$tfv_tk;
- $tfv_tk->Label(-text=>"File: $txtfile",
- -font=>$deffont,
- -relief=>'ridge',
- -borderwidth=>3)->pack(-side=>'top',
- -fill=>'x',
- -ipady=>10,
- -anchor=>'s');
- my $txtbody=$tfv_tk->Scrolled("Text",
- -relief=>'flat',
- -font=>$deffont,
- -height=>20,
- -width=>80,
- -scrollbars=>"e")->pack(-side=>'top',
- -fill=>'y',
- -expand=>1);
- open(TXTFILE,"$txtfile");
- while (<TXTFILE>) { $txtbody->insert('end',$_); }
- close(TXTFILE);
- $txtbody->configure(-state=>'disabled');
- $tlwins{$txtfile}{'buttons'}[0]=
- $tfv_tk->Button(-text=>'Close',
- -font=>$deffont,%butcol,
- -command=>sub{ destroy $tfv_tk;
- undef $tlwins{$txtfile};
- })->pack(-side=>'bottom',
- -fill=>'x');
- $tfv_tk->bind('<Control-c>'=>sub{destroy $tfv_tk;
- undef $tlwins{$txtfile};
- });
-}
-
-# print document selected in listbox
-sub prtslc {
- my($slc,$parframe)=@_;
- $tmpfno=&randname;
- my $pstmpfile="${TempDir}/texdoc_$tmpfno.ps";
- push @tmpfiles,$pstmpfile;
- my $status;
- chomp $slc;
- unless (defined $slc) {
- &popmsg(2,"No selection was made.",$parframe);
- return;
- }
- if ($print_cmd eq "") {
- &popmsg(2,"No printer specified.",$parframe);
- return;
- }
-# build complete path and check existence of file
- my @dummy=split('\.',$slc);
- if ($dummy[-1] =~ /sty$/) {
- $slc="../tex/$slc"; # .sty files are in ${tex,local,home}docpath/../tex
- }
- my $slcdoc;
- $slcdoc=&finddoc($slcdoc,$slc,$parframe);
- return if ($slcdoc eq "");
-# change to doc directory in case there are pictures
- my $docpath=substr($slcdoc,0,(rindex($slcdoc,'/',(length $slcdoc))));
- chdir ($docpath);
- DOC_FORMAT: { # determine document type
-# convert dvi files to ps before printing
- ($dummy[-1] =~ /dvi/) && do {
- if ($dvips_conv eq "") {
- &popmsg(2,"No converter available for dvi->ps conversion.",
- $parframe);
- return;
- }
- &popmsg(-1,"Converting dvi to ps for printing and sending file to print...",$parframe);
- $status=system("$dvips_conv $slcdoc -o $pstmpfile");
- if ($status != 0) {
- &popmsg(2,"Error: Conversion dvi->ps failed!",$parframe);
- }
- last DOC_FORMAT;
- };
-# PostScript is printed directly
- ($dummy[-1] =~ /ps/) && do {
- &popmsg(-1,"Sending file to $print_cmd...",$parframe);
- $pstmpfile=$slcdoc;
- last DOC_FORMAT;
- };
-# convert pdf files to ps before printing
- ($dummy[-1] =~ /pdf/) && do {
- if ($pdfps_conv eq "") {
- &popmsg(2,"No converter available for pdf->ps conversion.",
- $parframe);
- return;
- }
- &popmsg(-1,"Converting pdf to ps for printing and sending file to print...",$parframe);
- system("$pdfps_conv $slcdoc $pstmpfile");
- last DOC_FORMAT;
- };
-# convert html files to ps before printing
- ($dummy[-1] =~ /htm/) && do {
- if ($htmlps_conv eq "") {
- &popmsg(2,"No converter available for html->ps conversion.",
- $parframe);
- return;
- }
- &popmsg(-1,"Converting html to ps for printing and sending file to print...",$parframe);
- my $htmlps_redir_sign=($htmlps_redir == 1) ? ">" :"";
- system("$htmlps_conv $slcdoc $htmlps_redir_sign $pstmpfile");
- last DOC_FORMAT;
- };
-# convert txt files to ps before printing
- ($dummy[-1] =~ /txt/ || $dummy[-1] =~ /faq$/
- || $dummy[-1] =~ /README/i) && do {
- if ($txtps_conv eq "") {
- &popmsg(2,"No converter available for txt->ps conversion.",
- $parframe);
- return;
- }
- &popmsg(-1,"Converting txt to ps for printing and sending file to print...",$parframe);
- my $txtps_redir_sign=($txtps_redir == 1) ? ">" :"";
- system("$txtps_conv $slcdoc $txtps_redir_sign $pstmpfile");
- last DOC_FORMAT;
- };
-# convert extracted comments from sty files to ps before printing
- ($dummy[-1] =~ /sty$/) && do {
- if ($txtps_conv eq "") {
- &popmsg(2,"No converter available for sty(txt)->ps conversion.",
- $parframe);
- return;
- }
- &popmsg(-1,"Converting sty(txt) to ps for printing and sending file to print...",$parframe);
-# try to get doc out of .sty file
- &popmsg(-1,'Trying to extract documentation out of .sty file;
-might be cluttered with program comments.',
- $parframe);
- $slcdoc=&stripsty($slcdoc,substr($slc,7));
- my $txtps_redir_sign=($txtps_redir == 1) ? ">" :"";
- system("$txtps_conv $slcdoc $txtps_redir_sign $pstmpfile");
- last DOC_FORMAT;
- };
- &popmsg(2,"$dummy[-1]: cannot print document format",$parframe);
- return;
- };
- system("$print_cmd $pstmpfile");
-}
-
-# test existence and search a documentation which is not in specified place
-sub finddoc {
- my($slcdoc,$slc,$parframe)=@_;
- my ($dummy,$status);
- SLCDOCFIND: foreach ($texdocpath,$distdocpath,$docdocpath) {
- $slcdoc="$_/$slc";
- if (-e $slcdoc) {
-# found where it should be
- return $slcdoc;
- } else {
-# see if the documentation file is in the local doc tree...
- my @srchslcdoc=($slcdoc);
- if ($localdocpath) {
- push @srchslcdoc,"$localdocpath/$slc";
- return $srchslcdoc[-1] if (-e $srchslcdoc[-1]);
- }
-# ... or the user's doc tree...
- if ($homedocpath) {
- push @srchslcdoc,"$homedocpath/$slc";
- return $srchslcdoc[-1] if (-e $srchslcdoc[-1]);
- }
-# ... otherwise proceed with searching
- $status=-1;
-# see if the documentation file is compressed
- CMPREND: foreach my $cmprtype ("gz","bz2","zip") {
- foreach (@srchslcdoc) {
- $dummy="$_.$cmprtype";
- if (-e $dummy) { # yes, it is compressed
- $tmpfno=&randname;
- my $rawname=basename($slc,"");
- $slcdoc="${TempDir}/texdoc_$tmpfno$rawname";
- push @tmpfiles,$slcdoc;
- my ($dcmp,$dcmp_opt);
- COMPRESS: { # determine compression type
- ($cmprtype eq "gz") && do {
- $dcmp="gzip";
- $dcmp_opt="-cd";
- last COMPRESS;
- };
- ($cmprtype eq "bz2") && do {
- $dcmp="bzip2";
- $dcmp_opt="-cd";
- last COMPRESS;
- };
- ($cmprtype eq "zip") && do {
- $dcmp="zip";
- $dcmp_opt="-p";
- last COMPRESS;
- };
- };
-# try to decompress
- $status=system("$dcmp $dcmp_opt $dummy > $slcdoc");
- if ($status != 0) { # failure
- &popmsg(2,
- "$dcmp: Couldn't decompress file, cancelling.",
- $parframe);
- $slcdoc="";
- return $slcdoc;
- }
-# last CMPREND; does not work, what we need is:
- return $slcdoc;
- }
- }
- }
- }
- }
- if ($status != 0) {
- $parframe->configure(-cursor=>'watch');
-# try to find it elsewhere with kpsewhich
- my $rawname=basename($slc,"");
- $slcdoc=($slcdoc =~ /\.sty$/) ?
- `kpsewhich $rawname` :
- `kpsewhich --format=${qq}TeX system documentation${qq} $rawname`;
- if ($slcdoc eq "") { # nothing found; cancel
- &popmsg(2,"$rawname not found, cancelling.",$parframe);
- $slcdoc="";
- }
- $parframe->configure(-cursor=>$defcursor);
- }
- return $slcdoc;
-}
-
-# determine existence and show paths of files (Button-3)
-sub showpath {
- my ($docselect,$tpbframe)=@_;
- my $found=0;
- if ($docselect =~ /\.sty$/) {
- STYPATH: foreach my $fullpath ("$texmfmain/tex/$docselect",
- "$texmfdist/tex/$docselect",
- "$texmflocal/tex/$docselect",
- "$texmfhome/tex/$docselect") {
- if (-e $fullpath) {
- &popmsg(0,"Selected file:\n$fullpath",$tpbframe);
- $found=1;
- last STYPATH;
- }
- }
- if (!$found) {
- &popmsg(2,"Selected file:\n$docselect\ndoes not exist.",$tpbframe) }
- } else {
- DOCPATH: foreach my $fullpath ("$texdocpath/$docselect",
- "$distdocpath/$docselect",
- "$docdocpath/$docselect",
- "$localdocpath/$docselect",
- "$homedocpath/$docselect") {
- foreach ('','.gz','.bz2','.zip') {
- my $fullpathext="$fullpath$_";
- if (-e $fullpathext) {
- &popmsg(0,"Selected file:\n$fullpathext",$tpbframe);
- $found=1;
- last DOCPATH;
- }
- }
- }
- if (!$found) {
- &popmsg(2,"Selected file:\n$docselect\ndoes not exist (neither in normal form nor compressed).",$tpbframe) }
- }
-}
-
-# make or destroy search entry widget
-sub mksrch {
- my ($type) = @_;
- if ($srchflag == 1) {
- if ($type == $srchtype) {
- destroy $srchentry;
- $srchflag=0;
- } else {
- $srchtype = $type;
- }
- } else {
- $srchtype = $type;
-# get the search string
- $srchentry=$cmdframe->Entry(-cursor=>'xterm',
- -font=>$deffont,
- -width=>20,
- -takefocus=>1)->pack(-side=>'left');
- $srchentry->focus();
- $srchentry->bind('<Return>'=>[\&srchstr, $srchentry]);
- $srchflag=1;
-# key binding
- $srchentry->bind('<Control-c>'=>sub{destroy $srchentry; $srchflag=0;});
- $srchentry->bind('<Escape>'=>sub{destroy $srchentry; $srchflag=0;});
- }
-}
-
-# call search routine and display results
-sub srchstr {
- my $string;
- my @reslist;
- $string=$srchentry->get();
-# search
- $main->Busy(-recurse => 1);
- if ($srchtype == 0) {
- @reslist = &srchdb($string);
- } else {
- @reslist = &srchtd($string);
- }
- $main->Unbusy();
-# destroy entry widget and show results
- destroy $srchentry;
- $srchflag=0;
- if (scalar @reslist == 0) {
- &popmsg(0, ($srchtype == 0 ? 'Database' : 'File').
- " search for $string: no matches found.\n".
- "You may want to try a ".
- ($srchtype == 0 ? 'File' : 'Databse') . " search.\n\n".
- "If nothing else works, CTAN offers an online search form:\n".
- "http://ctan.org/search.html\n",
- $cmdframe);
- } else {
- &tpslct(-1, $string, @reslist);
- }
-}
-
-# search using texdoc
-sub srchtd {
- my ($string) = @_;
- my @res;
- my $tdout = `texdoc -M -l $string`;
- if ($?) {
- &popmsg(0,"texdoc failed, sorry: $!\n".
- "Please report this problem on the texlive mailing list.\n");
- return;
- } else {
- my $i = 0;
- for my $line (split /\n/, $tdout) {
- my @fields = split /\t/, $line;
- $doc[$ncat][$i] = $fields[2];
- $topic[$ncat][$i] = basename($fields[2]);
- $packname[$ncat][$i] = "no package name";
- push @res, ($ncat, $i++);
- }
- return @res;
- }
-}
-
-# search a string in @packname, @topic and @keywords
-sub srchdb {
- my ($string) = @_;
- my (@results, @reslist);
- if ($string) {
- for ($i=0; $i<$ncat; ++$i) {
- for ($j=0; $j<$maxind[$i]+1; ++$j) {
- SRCH: {
- ($topic[$i][$j] =~ /$string/i) && do {
- push @results,($i,$j);
- last SRCH;
- };
- (defined $keywords[$i][$j]) && do {
- if ($keywords[$i][$j] =~ /$string/i) {
- push @results,($i,$j);
- last SRCH;
- }
- };
- ($packname[$i][$j] =~ /$string/i) && do {
- push @results,($i,$j);
- last SRCH;
- };
- };
- }
- }
- } else { # return full database
- $string='all database entries';
- for ($i=0; $i<$ncat; ++$i) {
- for ($j=0; $j<$maxind[$i]+1; ++$j) { push @results,($i,$j); }
- }
- }
- unless (scalar @results == 0) {
-# cancel multiple entries
- my ($omit,$pack1,$pack2);
- @reslist=($results[0],$results[1]);
- for ($i=0; $i<$#results; $i+=2) {
- $omit=0;
- $pack1=$packname[$results[$i]][$results[$i+1]];
- for ($j=0; $j<$#reslist; $j+=2) {
- $pack2=$packname[$reslist[$j]][$reslist[$j+1]];
- if ($pack1 eq $pack2) { $omit=1; last; }
- }
- if ($omit == 0) { push @reslist,($results[$i],$results[$i+1]); }
- }
- }
- return @reslist;
-}
-
-# extract documentation of .sty files; a flag in the @keywords array shows
-# where the doc is located:
-# -0-: no specific place; -1-: at end, behind \endinput; -2-: at beginning,
-# terminated by %%%%%%; -3-: at beginning, terminated with blank line
-sub stripsty {
- my ($slcdoc,$slc)=@_;
- my @stydoc;
- $tmpfno=&randname;
- my $tmpslcdoc="${TempDir}/texdoc_$tmpfno.txt";
- push @tmpfiles,$tmpslcdoc;
- open (STY,"$slcdoc");
- LOC: {
- ($stydoc{$slc} == 0) && do { # no specific place, suck in everything :-(
- while ($line = <STY>) { push @stydoc,$line if ($line =~ /^%/); }
- last LOC;
- };
- ($stydoc{$slc} == 1) && do { # at end, behind \endinput
- while ($line = <STY>) {
- last if ($line =~ /^\s*\\endinput/ && !($line =~ /^%/));
- }
- while ($line = <STY>) { push @stydoc,$line; }
- last LOC;
- };
- ($stydoc{$slc} == 2) && do { # up to a certain %%%%%%%, hopefully the 1st
- for (my $i=0; $i<9; ++$i) { $stydoc[$i]=<STY>; } # after the 8th line
- while ($line = <STY>) {
- last if ($line =~ /^%{4,}/);
- push @stydoc,$line;
- }
- last LOC;
- };
- ($stydoc{$slc} == 3) && do { # up to 1st blank/apparently empty line
- while ($line = <STY>) {
- last if ($line =~ /^\s*$/);
- push @stydoc,$line;
- }
- last LOC;
- };
- };
- close(STY);
- open(TMPSTY,">$tmpslcdoc");
- foreach (@stydoc) { print TMPSTY $_; }
- close(TMPSTY);
- return $tmpslcdoc;
-}
-
-# pop up a note or an error or warning message toplevel window
-sub popmsg {
- my($level,$msg,$parframe)=@_;
- my $degree;
- LEVEL: {
- ($level == -1) && do { $degree="Info"; last LEVEL; };
- ($level == 0) && do { $degree="Note"; last LEVEL; };
- ($level == 1) && do {
- return if ($quiet == 1);
- $degree="Warning";
- last LEVEL
- };
- ($level == 2) && do { $degree="Error"; last LEVEL; };
- };
- my $msgwin=$parframe->Toplevel(-title=>$degree);
- my $lbl=$msgwin->Label(-text=>uc($degree),
- -font=>$deffont)->pack(-side=>'top', -fill=>'x');
-# get size of message text
- my @dummy=split("\n",$msg);
- my $nline=scalar @dummy;
- my $msgwidth=0;
- my $lline;
- foreach (@dummy) {
- $lline=length $_;
- if ($lline > $msgwidth) { $msgwidth=$lline; }
- }
- my $message=$msgwin->Text(-relief=>'flat',
- -font=>$deffont,
- -height=>$nline,
- -width=>$msgwidth)->pack(-side=>'top');
- $message->insert('end',$msg);
- $message->configure(-state=>'disabled');
- if ($level < 0) { # transient message window
- $msgwin->after(3000,sub{destroy $msgwin});
- } else { # persistent message window
- $msgwin->Button(-text=>'Close',
- -font=>$deffont,%butcol,
- -command=>sub{destroy $msgwin})->pack(-side=>'bottom',
- -fill=>'x');
- $msgwin->bind('<Control-c>'=>sub{destroy $msgwin});
- }
-}
-
-# show/change settings (don't show this to an expert :-/ )
-sub settings {
- my ($homedocpath_tmp,$quiet_tmp,$autoview_tmp,$xfmt_viewer_tmp,
- $dvi_viewer_tmp,$dvips_conv_tmp,
- $ps_viewer_tmp,$pdf_viewer_tmp,$pdfps_conv_tmp,
- $html_viewer_tmp,$htmlps_conv_tmp,$htmlps_redir_tmp,
- $txt_viewer_tmp,$txtps_conv_tmp,$txtps_redir_tmp,$print_cmd_tmp)=
- ($homedocpath,$quiet,$autoview,$xfmt_viewer,
- $dvi_viewer,$dvips_conv,$ps_viewer,
- $pdf_viewer,$pdfps_conv,$html_viewer,
- $htmlps_conv,$htmlps_redir,$txt_viewer,
- $txtps_conv,$txtps_redir,$print_cmd);
- my @tdcolors_tmp=@tdcolors;
-# see if toplevel window is already there
- if (Exists($tlwins{"setmenu"}{'addr'})) {
- $tlwins{"setmenu"}{'addr'}->deiconify();
- $tlwins{"setmenu"}{'addr'}->raise();
- return;
- }
- my $setmenu=$main->Toplevel(-title=>'Settings');
- $setmenu->resizable(0,0);
- $tlwins{"setmenu"}{'addr'}=$setmenu;
-# documentation path
- my $datlabel;
- $datlabel="Database file(s) used: teTeX";
- $datlabel.=", local database" if (-e $locdatabase);
- $datlabel.=", user database" if (-e $homedatabase);
- my $docframe=$setmenu->Frame(-relief=>'groove',
- -borderwidth=>2)->pack(-side=>'top',
- -fill=>'x',
- -expand=>1);
- my $docframestring="\nDistribution documentation root path(s):\n$texdocpath";
- $docframestring.=", $distdocpath" if (-e $distdocpath);
- $docframestring.=", $docdocpath" if (length $docdocpath);
- if ($localdocpath && $localdocpath ne $texdocpath) {
- $docframestring.="\nLocal documentation root path: $localdocpath\n";
- }
- $docframe->Label(-text=>"$docframestring",
- -font=>$deffont)->pack(-side=>'top',
- -anchor=>'w',
- -fill=>'x',
- -expand=>1);
- if (defined $texmfhome && -d $texmfhome) {
- $homedocpath_tmp=basename($homedocpath_tmp,"");
- my $usrdocframe=$docframe->Frame(-relief=>'flat')->pack(-side=>'top',
- -fill=>'x');
- my $usrdoclabel=$usrdocframe->Label(-text=>"User's documentation root path: $texmfhome/",
- -font=>$deffont)->pack(-side=>'left');
- my $usrdocentry=$usrdocframe->Entry(-textvariable=>\$homedocpath_tmp,
- -font=>$deffont)->pack(-side=>'left');
- }
- $docframe->Label(-text=>"$datlabel.",
- -font=>$deffont)->pack(-side=>'top',
- -anchor=>'w',
- -ipady=>2,
- -fill=>'x',
- -expand=>1);
-# General viewer behaviour
- my $genvframe=$setmenu->Frame(-label=>'General viewer behaviour',
- -relief=>'groove',
- -borderwidth=>2)->pack(-side=>'top',
- -fill=>'x',
- -ipady=>6,
- -expand=>1);
- my $genvframe1=$genvframe->Frame()->pack(-side=>'left');
- my $genvsub1=$genvframe1->Frame()->pack(-side=>'top',
- -anchor=>'w',
- -ipady=>3);
- my $genvecbut=$genvsub1->
- Checkbutton(-variable=>\$quiet_tmp)->pack(-side=>'left',
- -anchor=>'sw');
- my $genvelabel=$genvsub1->Label(-text=>'Suppress error messages',
- -font=>$deffont)->pack(-side=>'left',
- -anchor=>'sw');
- my $genvsub2=$genvframe1->Frame()->pack(-side=>'top',
- -anchor=>'w');
- my $genvscbut=$genvsub2->
- Checkbutton(-variable=>\$autoview_tmp)->pack(-side=>'left',
- -anchor=>'sw');
- my $genvslabel=$genvsub2->Label(-text=>'Autostart viewer for one-item listboxes',
- -font=>$deffont)->pack(-side=>'left',
- -anchor=>'sw');
- my $genvsub3=$genvframe1->Frame()->pack(-side=>'top',
- -anchor=>'w');
- my $genvxcbut=$genvsub3->
- Checkbutton(-variable=>\$xfmt_viewer_tmp)->pack(-side=>'left',
- -anchor=>'sw');
- my $genvxlabel=$genvsub3->Label(-text=>'Use text viewer for unknown file format',
- -font=>$deffont)->pack(-side=>'left',
- -anchor=>'sw');
-# colours of GUI
- my @tdcolors_d=@tdcolors_tmp;
- $tlwins{'setmenu'}{'buttons'}[0]=
- $genvframe->Button(-text=>'Change viewer colours',
- -command=>sub {
- @tdcolors_tmp=&popcolor($setmenu,@tdcolors_tmp);
- @tdcolors_d=@tdcolors_tmp;
- },
- -font=>$deffont,%butcol)->pack(-side=>'right');
-# DVI
- my $dviframe=$setmenu->Frame(-label=>'DVI',
- -relief=>'groove',
- -borderwidth=>2)->pack(-side=>'top',
- -fill=>'x',
- -ipady=>6,
- -expand=>1);
- my $dvisub1=$dviframe->Frame()->pack(-side=>'top',
- -anchor=>'w');
- my $dvisub2=$dviframe->Frame()->pack(-side=>'top',
- -anchor=>'w',
- -ipady=>6);
- my $dvivlabel=$dvisub1->Label(-text=>'Viewer command',
- -anchor=>'w',
- -font=>$deffont)->pack(-side=>'left');
- my $dviventry=$dvisub1->Entry(-textvariable=>\$dvi_viewer_tmp,
- -font=>$deffont)->pack(-side=>'left');
- my $dviclabel=$dvisub2->Label(-text=>'DVI->PS converter command',
- -anchor=>'w',
- -font=>$deffont)->pack(-side=>'left',
- -anchor=>'sw');
- my $dvilbwidth=length 'DVI->PS converter command';
- $dvivlabel->configure(-width=>1.1*$dvilbwidth);
- $dviclabel->configure(-width=>1.1*$dvilbwidth);
- my $dvicentry=$dvisub2->Entry(-textvariable=>\$dvips_conv_tmp,
- -font=>$deffont)->pack(-side=>'left',
- -anchor=>'sw');
-# PostScript
- my $psframe=$setmenu->Frame(-label=>'PostScript',
- -relief=>'groove',
- -borderwidth=>2)->pack(-side=>'top',
- -fill=>'x',
- -ipady=>10,
- -expand=>1);
- my $psvlabel=$psframe->Label(-text=>'Viewer command',
- -font=>$deffont)->pack(-side=>'left',
- -anchor=>'w');
- my $psventry=$psframe->Entry(-textvariable=>\$ps_viewer_tmp,
- -font=>$deffont)->pack(-side=>'left');
-# PDF
- my $pdfframe=$setmenu->Frame(-label=>'PDF',
- -relief=>'groove',
- -borderwidth=>2)->pack(-side=>'top',
- -fill=>'x',
- -ipady=>6,
- -expand=>1);
- my $pdfsub1=$pdfframe->Frame()->pack(-side=>'top',
- -anchor=>'w');
- my $pdfsub2=$pdfframe->Frame()->pack(-side=>'top',
- -anchor=>'w',
- -ipady=>6);
- my $pdfvlabel=$pdfsub1->Label(-text=>'Viewer command',
- -font=>$deffont)->pack(-side=>'left',
- -anchor=>'w');
- my $pdfventry=$pdfsub1->Entry(-textvariable=>\$pdf_viewer_tmp,
- -font=>$deffont)->pack(-side=>'left');
- my $pdfclabel=$pdfsub2->Label(-text=>'PDF->PS converter command',
- -font=>$deffont)->pack(-side=>'left',
- -anchor=>'sw');
- my $pdfcentry=$pdfsub2->Entry(-textvariable=>\$pdfps_conv_tmp,
- -font=>$deffont)->pack(-side=>'left',
- -anchor=>'sw');
-# HTML
- my $htmlframe=$setmenu->Frame(-label=>'HTML',
- -relief=>'groove',
- -borderwidth=>2)->pack(-side=>'top',
- -fill=>'x',
- -ipady=>6,
- -expand=>1);
- my $htmlsub1=$htmlframe->Frame()->pack(-side=>'top',
- -anchor=>'w');
- my $htmlsub2=$htmlframe->Frame()->pack(-side=>'top',
- -anchor=>'w',
- -ipady=>6);
- my $htmlvlabel=$htmlsub1->Label(-text=>'Viewer command',
- -font=>$deffont)->pack(-side=>'left',
- -anchor=>'w');
- my $htmlventry=$htmlsub1->Entry(-textvariable=>\$html_viewer_tmp,
- -font=>$deffont)->pack(-side=>'left');
- my $htmlclabel=$htmlsub2->Label(-text=>'HTML->PS converter command',
- -font=>$deffont)->pack(-side=>'left',
- -anchor=>'sw');
- my $htmlcentry=$htmlsub2->Entry(-textvariable=>\$htmlps_conv_tmp,
- -font=>$deffont)->pack(-side=>'left',
- -anchor=>'sw');
- my $htmlrlabel=$htmlsub2->Label(-text=>'Output redirect needed',
- -font=>$deffont)->pack(-side=>'left',
- -anchor=>'sw');
- my $htmlrcbut=$htmlsub2->
- Checkbutton(-variable=>\$htmlps_redir_tmp)->pack(-side=>'left',
- -anchor=>'sw');
-# plain text
- my $txtframe=$setmenu->Frame(-label=>'Plain text',
- -relief=>'groove',
- -borderwidth=>2)->pack(-side=>'top',
- -fill=>'x',
- -ipady=>6,
- -expand=>1);
- my $txtsub1=$txtframe->Frame()->pack(-side=>'top',
- -anchor=>'w');
- my $txtsub2=$txtframe->Frame()->pack(-side=>'top',
- -anchor=>'w',
- -ipady=>6);
- my $txtvlabel=$txtsub1->Label(-text=>'Viewer command',
- -font=>$deffont)->pack(-side=>'left',
- -anchor=>'w');
- my $txtventry=$txtsub1->Entry(-textvariable=>\$txt_viewer_tmp,
- -font=>$deffont)->pack(-side=>'left');
- my $txt_view_flag;
- if ($txt_viewer_tmp eq "TDK_OWN") {
- $txt_view_flag=1;
- $txtventry->configure(-state=>'disabled');
- } else {
- $txt_view_flag=0;
- $txtventry->configure(-state=>'normal');
- }
- my $txtvilabel=$txtsub1->Label(-text=>"\tUse texdoctk\'s own viewer",
- -font=>$deffont)->pack(-side=>'left',
- -anchor=>'sw');
- my $txtvcbut=$txtsub1->
- Checkbutton(-variable=>\$txt_view_flag,
- -command=>sub {
- if ($txt_view_flag == 1) {
- $txt_viewer_tmp="TDK_OWN";
- $txtventry->configure(-state=>'disabled');
- } else {
- $txt_viewer_tmp=$txt_viewer;
- $txtventry->configure(-state=>'normal');
- $txtventry->focus();
- }
- })->pack(-side=>'left',
- -anchor=>'sw');
- my $txtclabel=$txtsub2->Label(-text=>'Text->PS converter command',
- -font=>$deffont)->pack(-side=>'left',
- -anchor=>'sw');
- my $txtcentry=$txtsub2->Entry(-textvariable=>\$txtps_conv_tmp,
- -font=>$deffont)->pack(-side=>'left',
- -anchor=>'sw');
- my $txtrlabel=$txtsub2->Label(-text=>'Output redirect needed',
- -font=>$deffont)->pack(-side=>'left',
- -anchor=>'sw');
- my $txtrcbut=$txtsub2->
- Checkbutton(-variable=>\$txtps_redir_tmp)->pack(-side=>'left',
- -anchor=>'sw');
-# printer
- my $prtframe=$setmenu->Frame(-label=>'Printer',
- -relief=>'groove',
- -borderwidth=>2)->pack(-side=>'top',
- -fill=>'x',
- -ipady=>10,
- -expand=>1);
- my $prtclabel=$prtframe->Label(-text=>'Command',
- -font=>$deffont)->pack(-side=>'left',
- -anchor=>'w');
- my $prtcentry=$prtframe->Entry(-textvariable=>\$print_cmd_tmp,
- -font=>$deffont)->pack(-side=>'left');
-# buttons and key bindings
- my $setbfr=$setmenu->Frame()->pack(-side=>'bottom');
- $tlwins{'setmenu'}{'buttons'}[1]=
- $setbfr->Button(-text=>'OK',
- -font=>$deffont,%butcol,
- -command=>sub{
- $homedocpath="$texmfhome/$homedocpath_tmp";
- ($quiet,$autoview,$xfmt_viewer,
- $dvi_viewer,$dvips_conv,
- $ps_viewer,$pdf_viewer,
- $pdfps_conv,$html_viewer,
- $htmlps_conv,$htmlps_redir,
- $txt_viewer,$txtps_conv,$txtps_redir,$print_cmd)=
- ($quiet_tmp,$autoview_tmp,$xfmt_viewer_tmp,
- $dvi_viewer_tmp,$dvips_conv_tmp,
- $ps_viewer_tmp,
- $pdf_viewer_tmp,$pdfps_conv_tmp,
- $html_viewer_tmp,
- $htmlps_conv_tmp,$htmlps_redir_tmp,
- $txt_viewer_tmp,$txtps_conv_tmp,
- $txtps_redir_tmp,$print_cmd_tmp);
- @tdcolors=@tdcolors_tmp;
- %butcol=('-background'=>$tdcolors[0],
- '-foreground'=>$tdcolors[1],
- '-activebackground'=>$tdcolors[2],
- '-activeforeground'=>$tdcolors[3]);
- foreach my $tlkey (keys %tlwins) {
- foreach (@{$tlwins{$tlkey}{'buttons'}}) {
- $_->configure(%butcol);
- }
- }
- if ($txt_viewer eq "" &&
- defined $ENV{PAGER}) {
- $txt_viewer=$ENV{PAGER};
- }
- destroy $setmenu},
- -width=>6)->pack(-side=>'left',
- -padx=>10,
- -pady=>10);
- $tlwins{'setmenu'}{'buttons'}[2]=
- $setbfr->Button(-text=>'Save',
- -font=>$deffont,%butcol,
- -command=>sub{
- $setmenu->configure(-cursor=>'watch');
- &popmsg(-1,"Writing settings to $myrc",$setmenu);
- my $tdcolors_tmp=join(' ',@tdcolors_tmp);
- &writerc($homedocpath_tmp,
- $quiet_tmp,$autoview_tmp,$xfmt_viewer_tmp,
- $tdcolors_tmp,
- $dvi_viewer_tmp,$dvips_conv_tmp,
- $ps_viewer_tmp,
- $pdf_viewer_tmp,$pdfps_conv_tmp,
- $html_viewer_tmp,
- $htmlps_conv_tmp,$htmlps_redir_tmp,
- $txt_viewer_tmp,$txtps_conv_tmp,
- $txtps_redir_tmp,$print_cmd_tmp,$setmenu);
- $setmenu->configure(-cursor=>$defcursor);
- })->pack(-side=>'left',
- -padx=>10);
- $tlwins{'setmenu'}{'buttons'}[3]=
- $setbfr->Button(-text=>'Cancel',
- -font=>$deffont,%butcol,
- -command=>sub{destroy $setmenu;
- undef $tlwins{"setmenu"};
- })->pack(-side=>'left',
- -padx=>10);
- $setmenu->bind('<Control-c>'=>sub{destroy $setmenu;
- undef $tlwins{"setmenu"};});
-}
-
-# dialog toplevel for color settings
-sub popcolor {
- my ($parframe,@entryvar)=@_;
-# see if toplevel window is already there
- if (Exists($tlwins{'chngcol'}{'addr'})) {
- $tlwins{'chngcol'}{'addr'}->deiconify();
- $tlwins{'chngcol'}{'addr'}->raise();
- return;
- }
- my $dlgwin=$parframe->Toplevel(-title=>'Change colours');
- $dlgwin->resizable(0,0);
- $tlwins{'chngcol'}{'addr'}=$dlgwin;
-# entry widgets for default/active back/foreground
- $dlgwin->Label(-text=>'Enter colours as names or RGB #xxxxxx values',
- -font=>$deffont)->pack(-side=>'top');
- my $dlgdef=$dlgwin->Frame()->pack(-side=>'top');
- my $dlgact=$dlgwin->Frame()->pack(-side=>'top');
- my $dlgdef1=$dlgdef->Frame()->pack(-side=>'left');
- my $dlgtfr0=$dlgdef1->Frame()->pack(-side=>'top');
- my $dlgtfr1=$dlgdef1->Frame()->pack(-side=>'top');
- my $dlgact1=$dlgact->Frame()->pack(-side=>'left');
- my $dlgtfr2=$dlgact1->Frame()->pack(-side=>'top');
- my $dlgtfr3=$dlgact1->Frame()->pack(-side=>'top');
- $dlgtfr0->Label(-text=>"Default background",
- -anchor=>'w',
- -width=>18,
- -font=>$deffont)->pack(-side=>'left');
- $dlgtfr0->Entry(-textvariable=>\$entryvar[0],
- -font=>$deffont)->pack(-side=>'left');
- $dlgtfr1->Label(-text=>"Default foreground",
- -anchor=>'w',
- -width=>18,
- -font=>$deffont)->pack(-side=>'left');
- $dlgtfr1->Entry(-textvariable=>\$entryvar[1],
- -font=>$deffont)->pack(-side=>'left');
- my $deflabel=$dlgdef->Label(-text=>'Default',
- -relief=>'ridge',
- -width=>10,
- -height=>2)->pack(-side=>'right',
- -padx=>7);
- $dlgtfr2->Label(-text=>"Active background",
- -anchor=>'w',
- -width=>18,
- -font=>$deffont)->pack(-side=>'left');
- $dlgtfr2->Entry(-textvariable=>\$entryvar[2],
- -font=>$deffont)->pack(-side=>'left');
- $dlgtfr3->Label(-text=>"Active foreground",
- -anchor=>'w',
- -width=>18,
- -font=>$deffont)->pack(-side=>'left');
- $dlgtfr3->Entry(-textvariable=>\$entryvar[3],
- -font=>$deffont)->pack(-side=>'left');
- my $actlabel=$dlgact->Label(-text=>'Active',
- -background=>$entryvar[2],
- -foreground=>$entryvar[3],
- -relief=>'ridge',
- -width=>10,
- -height=>2)->pack(-side=>'right',
- -padx=>7);
-# buttons
- my $setbfr=$dlgwin->Frame()->pack(-side=>'bottom');
- my $chngflag=0;
- $tlwins{'chngcol'}{'buttons'}[0]=
- $setbfr->Button(-text=>'OK',
- -font=>$deffont,%butcol,
- -command=>sub {
- foreach (@entryvar) { # RGB form with leading #
- $_="#$_" if (/^[A-Fa-f0-9]{6}$/);
- }
- $chngflag=1 if (&colcheck($dlgwin,@entryvar));
- },
- -width=>6)->pack(-side=>'left',
- -padx=>5,
- -pady=>10);
- $tlwins{'chngcol'}{'buttons'}[1]=
- $setbfr->Button(-text=>'Preview',
- -font=>$deffont,%butcol,
- -command=>sub {
- foreach (@entryvar) { # RGB form with leading #
- $_="#$_" if (/^[A-Fa-f0-9]{6}$/);
- }
- if (&colcheck($dlgwin,@entryvar)) {
- $deflabel->
- configure(-background=>$entryvar[0],
- -foreground=>$entryvar[1]);
- $actlabel->
- configure(-background=>$entryvar[2],
- -foreground=>$entryvar[3]);
- }
- },
- -width=>6)->pack(-side=>'left',
- -padx=>5,
- -pady=>10);
- $tlwins{'chngcol'}{'buttons'}[2]=
- $setbfr->Button(-text=>'Cancel',
- -font=>$deffont,%butcol,
- -command=>sub{destroy $dlgwin;
- undef $tlwins{'chngcol'};
- })->pack(-side=>'right',
- -padx=>5,
- -pady=>10);
- $dlgwin->bind('<Control-c>'=>sub{destroy $dlgwin;
- undef $tlwins{'chngcol'}; });
- $dlgwin->waitVariable(\$chngflag);
- destroy $dlgwin;
- undef $tlwins{'chngcol'};
- return @entryvar;
-}
-
-# check colours set in popcolor; relies on the existence of X11's showrgb
-sub colcheck {
- my ($dlgwin,@entryvar)=@_;
- my $ecnt=0;
- foreach (@entryvar) { # all colours defined?
- last unless ($_);
- ++$ecnt;
- }
- &popmsg(2,'Some colours undefined.',$dlgwin) if ($ecnt != 4);
- my $defcol=0;
- if (`which showrgb`) { # test for proper name
- my @rgb=`showrgb`;
- my @norgb;
- foreach my $colour (@entryvar) {
- if ($colour =~ /^#[A-Fa-f0-9]{6}$/ || grep /\b$colour\b/i,@rgb) {
- ++$defcol;
- } else {
- push @norgb,$colour;
- }
- }
- if ($defcol != 4) {
- my $norgb=join("\n",@norgb);
- &popmsg(2,"Some colours invalid:\n$norgb",$dlgwin);
- }
- } else { $defcol=4; }
- return ($ecnt == 4 && $defcol == 4) ? 1 : 0;
-}
-
-# write user's ~/.texdocrc
-sub writerc {
- use File::Copy qw/cp mv/;
- my ($homedocpath_tmp,$quiet_tmp,$autoview_tmp,$xfmt_viewer_tmp,
- $tdcolors_tmp,
- $dvi_viewer_tmp,$dvips_conv_tmp,
- $ps_viewer_tmp,
- $pdf_viewer_tmp,$pdfps_conv_tmp,
- $html_viewer_tmp,
- $htmlps_conv_tmp,$htmlps_redir_tmp,
- $txt_viewer_tmp,$txtps_conv_tmp,
- $txtps_redir_tmp,$print_cmd_tmp,$parframe)=@_;
- my $err=0;
- mv $myrc,"$myrc.save" if (-e $myrc);
- open(MYRC,">$myrc");
- print MYRC "# user's .texdocrc, generated by program\n
-# root of user's doc directory (from \$HOMETEXMF)
-# can be left empty if \$TEXMFHOME is undefined
-HOMEDOCPATH=$homedocpath_tmp
-# general viewer behaviour (y or yes to make active)
-QUIET=$quiet_tmp
-AUTOVIEW=$autoview_tmp
-XFMT_VIEWER=$xfmt_viewer_tmp
-# button colours: default and active back-/foreground
-# names and RGB values are both allowed; use the form #xxxxxx for RGB
-TDCOLORS=$tdcolors_tmp
-# the following variables contain whole commands, i.e. options can be given
-# DVI settings
-DVI_VIEWER=$dvi_viewer_tmp
-DVIPS_CONV=$dvips_conv_tmp
-# PostScript handling
-PS_VIEWER=$ps_viewer_tmp
-# PDF handling
-PDF_VIEWER=$pdf_viewer_tmp
-PDFPS_CONV=$pdfps_conv_tmp
-# HTML handling
-HTML_VIEWER=$html_viewer_tmp
-HTMLPS_CONV=$htmlps_conv_tmp
-# HTMLPS_REDIR must be on, if the html->ps converter normally writes its output
-# to stdout instead of a file (e.g. as html2ps) (y or yes to make active)
-HTMLPS_REDIR=$htmlps_redir_tmp
-# Plain text handling
-# TDK_OWN is texdoctk's own text file viewer
-TXT_VIEWER=$txt_viewer_tmp
-TXTPS_CONV=$txtps_conv_tmp
-# TXTPS_REDIR must be on, if the txt->ps converter normally writes its output
-# to stdout instead of a file (e.g. as a2ps) (y or yes to make active)
-TXTPS_REDIR=$txtps_redir_tmp
-# printer
-PRINT_CMD=$print_cmd_tmp
-\n# end of config\n";
- close(MYRC);
-}
-
-# help window (toplevel)
-sub helptext {
-# see if toplevel window is already there
- if (Exists($tlwins{"helptext"}{'addr'})) {
- $tlwins{"helptext"}{'addr'}->deiconify();
- $tlwins{"helptext"}{'addr'}->raise();
- return;
- }
- my $help=$main->Toplevel(-title=>'Help/About');
- $help->resizable(0,1);
- $tlwins{'helptext'}{'addr'}=$help;
- $help->Label(-text=>"texdoctk
-TeX documentation browser
-v$version ($date)",
- -font=>$deffont)->pack(-side=>'top',
- -ipady=>10,
- -anchor=>'s');
- my $helpbody=$help->Scrolled("Text",
- -relief=>'flat',
- -font=>$deffont,
- -height=>20,
- -width=>60,
- -scrollbars=>"e")->pack(-side=>'top',
- -fill=>'y',
- -expand=>1);
- my $pos=tell DATA;
- while (<DATA>) {
- $_ =~ s/\$sysrc/$sysrc/;
- last if (/^#/);
- $helpbody->insert('end',$_);
- }
- seek(DATA,$pos,0);
- $helpbody->configure(-state=>'disabled');
- $tlwins{'helptext'}{'buttons'}[0]=
- $help->Button(-text=>'Close',
- -font=>$deffont,%butcol,
- -command=>sub{destroy $help;
- undef $tlwins{"helptext"};
- })->pack(-side=>'bottom',
- -fill=>'x');
- $help->bind('<Control-c>'=>sub{destroy $help; undef $tlwins{"helptext"};});
-}
-
-# read config file; personal settings override the default settings
-sub readrc {
- my($rcfile,$icall)=@_;
- my ($var,$val);
- my $pathflag=0;
- my $pathflagl=0;
- my $pathflagh=0;
- my $tdcolors='';
-# for backward compatibility of converter/printer options
- my ($dvips_opts,$pdfps_opts,$print_opts);
-# read defaults resp. local/personal settings
- CALL: {
- ($icall == 1) && do {
- open (RC,"$rcfile") ||
- &fatalmsg("Couldn't open system-wide default config file ${TeXDocRcDefaults}.\n");
- last CALL;
- };
- ($icall == 2) && do {
- open (RC,"$rcfile") ||
- &fatalmsg("Couldn't open personal config file ~/.texdocrc.\n");
- last CALL;
- };
- };
- while ($line = <RC>) {
- next if ($line =~ /^($|#)/);
- chomp $line;
- ($var,$val)=split("=",$line,2);
- RCVARS: {
- ($var =~ /texdocpath/i) && do { # TEXDOCPATH
- if (length $val > 0) {
- $pathflag=1;
- eval(join("",("\$",lc($var),"=\$val")));
- }
- last RCVARS;
- };
- ($var =~ /localdocpath/i) && do { # LOCALDOCPATH
- if (length $val > 0) {
- $pathflagl=1;
- eval(join("",("\$",lc($var),"=\$val")));
- }
- last RCVARS;
- };
- ($var =~ /homedocpath/i) && do { # HOMEDOCPATH
- if ($icall == 2 && length $val > 0) { # set only in ~/.texdocrc
- $pathflagh=1;
- eval(join("",("\$",lc($var),"=\$val")));
- }
- last RCVARS;
- };
- # other variables
- eval(join("",("\$",lc($var),"=\$val")));
- };
- }
- close(RC);
-# find texmf/doc, and possibly other distribution texmf trees
- if ($rcfile eq $sysrc || $pathflag == 1) {
- $texmfmain=`kpsewhich --expand-path=${qq}\$TEXMFMAIN${qq}`;
- chomp $texmfmain;
- $texdocpath="$texmfmain/$texdocpath";
- $texmfdist=`kpsewhich --expand-path=${qq}\$TEXMFDIST${qq}`;
- chomp $texmfdist;
- $distdocpath=join('/',"$texmfdist",basename($texdocpath,""))
- if (length $texmfdist);
- # TeXLive has this texmf-doc
- $texmfdoc=join('/',"$texmfmain-doc",basename($texdocpath,""));
- if (-e $texmfdoc) {
- chomp $texmfdoc;
- $docdocpath="$texmfdoc/$docdocpath";
- }
- }
-# find texmf-local/doc, if there is one
- if ($rcfile eq $sysrc || $pathflagl == 1) {
- $texmflocal=`kpsewhich --expand-path=${qq}\$TEXMFLOCAL${qq}`;
- chomp $texmflocal;
- if (length $texmflocal) {
- # if LOCALDOCPATH is not explicitly defined, it equals TEXDOCPATH
- unless (defined $localdocpath) {
- $localdocpath=basename($texdocpath,"");
- }
- $localdocpath="$texmflocal/$localdocpath";
- }
- }
-# find user's $HOMETEXMF/doc, if there is one
- if ($icall == 2 || $pathflagh == 1) {
- $texmfhome=`kpsewhich --expand-path=${qq}\$HOMETEXMF${qq}`;
- chomp $texmfhome;
- if (length $texmfhome) {
- # if HOMEDOCPATH is not explicitly defined, it equals TEXDOCPATH
- unless (defined $homedocpath) {
- $homedocpath=basename($texdocpath,"");
- }
- $homedocpath="$texmfhome/$homedocpath";
- }
- }
-# colours: create array
- @tdcolors=split(' ',$tdcolors);
- if (scalar @tdcolors != 4) { # if old texdocrc file is used
- if (!(-e $myrc) || (-e $myrc && $icall == 2)) {
- print "NOTE: Button colours not set in $rcfile; using defaults.\n";
- @tdcolors=('#d9d9d9','Black','#ececec','red');
- }
- }
- %butcol=('-background'=>$tdcolors[0],
- '-foreground'=>$tdcolors[1],
- '-activebackground'=>$tdcolors[2],
- '-activeforeground'=>$tdcolors[3]);
-# viewer: suppress viewer warnings/use $PAGER if no $txt_viewer is defined
- $quiet=($quiet =~ /y/i || $quiet eq "1") ? 1 : 0;
- if (!(defined $txt_viewer) && defined $ENV{PAGER}) {
- $txt_viewer=$ENV{PAGER};
- }
-# viewer: autostart viewer if listbox of search results contains only 1 item
- $autoview=($autoview =~ /y/i || $autoview eq "1") ? 1 : 0;
-# viewer: use text viewer to open files with unrecognized format
- $xfmt_viewer=($xfmt_viewer =~ /y/i || $xfmt_viewer eq "1") ? 1 : 0;
-# converter: output redirection flags for HTML/Text->PS converters
- $htmlps_redir=($htmlps_redir =~ /(y|1)/i) ? 1 : 0;
- $txtps_redir=($txtps_redir =~ /(y|1)/i) ? 1 : 0;
-# for backward compatibility of converter/printer options
- $dvips_conv.=" $dvips_opts" if ($dvips_opts);
- $pdfps_conv.=" $pdfps_opts" if ($pdfps_opts);
- $print_cmd.=" $print_opts" if ($print_opts);
-}
-
-# determine resolution if xwininfo is available
-# slightly modified from a patch contributed by Reinhard Kotucha
-sub x_resolution {
- my $x_res;
- if ($IsWin32) {
- $x_res = &GetScreenWidth;
- }
- else {
- open(XINF,"xwininfo -root|") or return 1200;
- while (<XINF>) {
- chop;
- if (/Width:/) { ($x_res=$_)=/Width:\s+(\d+)/; last; }
- }
- close(XINF);
- }
- return $x_res;
-}
-
-# generate a random name for temporary files
-sub randname {
- my $namestr;
- my @chars=("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z");
- my $time=time;
- my $maxcnt=3+substr($time,-1);
- for (my $i=0; $i<=$maxcnt; $i++) { $namestr.=$chars[rand(51)] }
- my @tmp=split(/./,$time/$$);
- $namestr.=$tmp[1];
- until (length($namestr) > 16) { $namestr.=int(rand(1000000)) }
- return $namestr;
-}
-
-# find index of an array entry
-sub arrindex {
- my @array=@_;
- my $item=pop @array;
- my $i=0;
- foreach (@array) {
- last if ($_ eq $item);
- ++$i;
- }
- return $i;
-}
-
-# clean up and exit
-sub clean_exit {
- foreach (@tmpfiles) { if (-e $_) { unlink $_; } }
- exit;
-}
-
-# alternative main window, launched for fatal error messages on startup
-sub fatalmsg {
- my($msg)=@_;
- print STDERR $msg; # also print to stderr
-# create frame for main window
- my $main=new MainWindow;
- $main->resizable(0,0);
- $main->title("TeX Documentation Browser");
- $main->bind('<Control-q>'=>sub { exit });
- $main->bind('<Control-k>'=>sub { exit });
- my $msgframe=$main->Frame(-background=>"#ffcc99");
- my $cmdframe=$main->Frame;
- $msgframe->pack(-side=>'top');
- $cmdframe->pack(-side=>'bottom',-fill=>'x');
-# make buttons for command frame
- my $Qbut=$cmdframe->Button(-text=>'Kill',%butcol,
- -command=>sub { exit })->pack(-fill=>'x');
-# define common default font for labels and text explicitly
- my @deffont=$Qbut->configure(-font);
-# ensure readability on high-res screens (suggested by R.Kotucha)
- $deffont='Helvetica -16 bold' if &x_resolution > 1200;
- $Qbut->configure(-font=>$deffont);
- $msgframe->Label(-text=>'FATAL ERROR',
- -font=>$deffont)->pack(-side=>'top', -fill=>'x');
-# get size of message text
- my @dummy=split("\n",$msg);
- my $nline=scalar @dummy;
- my $msgwidth=0;
- my $lline;
- foreach (@dummy) {
- $lline=length $_;
- if ($lline > $msgwidth) { $msgwidth=$lline; }
- }
- my $message=$msgframe->Text(-relief=>'flat',
- -font=>$deffont,
- -height=>$nline,
- -width=>$msgwidth)->pack(-side=>'top');
- $message->insert('end',$msg);
- $message->configure(-state=>'disabled');
- MainLoop;
-}
-
-if ($IsWin32) {
- sub GetScreenWidth {
- my $GetDeviceCaps = new Win32::API('gdi32', 'GetDeviceCaps', 'NN', 'N');
- my $HORZRES = 8; # from WinGDI.h
- if(not defined $GetDeviceCaps) {
- die "Can't import API GetDeviceCaps: $!\n";
- }
- return $GetDeviceCaps->Call(0, $HORZRES);
- }
-
- sub GetTempPath {
- my $GetTempPath = new Win32::API('kernel32', 'GetTempPath', 'NP', 'N');
- if(not defined $GetTempPath) {
- die "Can't import API GetTempPath: $!\n";
- }
- my $lpBuffer = " " x 260;
-
- $GetTempPath->Call(80, $lpBuffer);
- }
-
- sub ShellExecute {
- my ($command, $file) = @_;
- my $ShellExecute = new Win32::API('shell32', 'ShellExecute', 'NPPPPN', 'N');
- if(not defined $ShellExecute) {
- die "Can't import API ShellExecute: $!\n";
- }
- $ShellExecute->Call(0, $command, $file, '', '', 0);
- }
-
- sub GetHomeDir {
- my $home = $ENV{'HOME'};
- # Should check for CSIDL_...
- return $home;
- }
-}
-__END__
-Many TeX programmers provide more or less detailed manuals for
-their programs or packages. They are usually available as .dvi,
-.ps, .pdf, .html or plain text files (sometimes included in the
-.sty files instead of a separate documentation file) and can be
-accessed with this browser, which is simply an interface to find a
-documentation more easily. It starts the respective viewer for
-reading the selected documentation making use of a database file
-which contains the path entries according to the current teTeX
-texmf/doc structure; additional usage of a system-wide local and
-of individual user texmf trees with corresponding databases is also
-possible.
-The documentations are grouped in several categories shown in the
-main window; pressing one of its buttons lists all documentations
-belonging to this topic.
-The topic window lets you select one documentation file, view or
-send it to the default printer. By right-clicking on the selected
-item you get the complete path of the file.
-The search button of the main window allows you to search the
-database for a string; it does not search file names. Enter the
-string and hit <Return> to start the search or <Control-c> to
-cancel. Just hitting <Return> without typing something in will
-show the full list of files in the database.
-Defaults for the documentation root directory, the viewers, the
-converters, certain options and the printer are set in the global
-configuration file $sysrc.
-However, each user can put a copy of it as .texdocrc into his home
-directory to modify them according to his needs; modification or
-generation of ~/.texdocrc can also be done with the Settings menu.
-Additionally, the settings can be changed temporarily with this
-menu.
-
-The following key shortcuts are defined for use with the browser:
- <Ctrl-q> Quit browser
- <Ctrl-m> Raise the Main window to the foreground
- <Ctrl-s> Search a keyword in database (case insensitive)
- <Ctrl-c> Cancel/close subwindow or search entry widget
- <Ctrl-v> View selected document (topic windows)
- <Ctrl-p> Print selected document (topic windows)
- <Ctrl-t> Open settings menu
- <Ctrl-k> Kill fatal error message window (same as
- <Ctrl-q>)
- <Ctrl-h> Open this help
- <Return> Equivalent to button press;
- OK in selection menu and search
- <Tab> Next/previous widget
-
-There are the following command line options:
- -a autostart viewer if a listbox of search results
- contains only one item; can also be set in a
- configuration file
- -v disable suppression of viewer messages sent to
- stderr and of certain permanent message popup
- windows, in case this was not set in a
- configuration file; default: off
-
-Some more information is available in the manpage of texdoctk.
-
-Comments and suggestions to:
-Thomas Ruedas
-tr@dlc.ku.dk or tex-k@tug.org
-# Local Variables:
-# mode: perl
-# auto-fill-hook: do-auto-fill
-# End:
-# vim: ts=8 sw=4 noexpandtab