Revision: 67 http://geany-plugins.svn.sourceforge.net/geany-plugins/?rev=67&view=rev Author: frlan Date: 2008-06-16 15:18:07 -0700 (Mon, 16 Jun 2008)
Log Message: ----------- GeanyLaTeX: Inital import of GeanyLaTeX-plugin.
Added Paths: ----------- trunk/geanylatex/ trunk/geanylatex/COPYING trunk/geanylatex/ChangeLog trunk/geanylatex/INSTALL trunk/geanylatex/Makefile.am trunk/geanylatex/THANKS trunk/geanylatex/TODO trunk/geanylatex/autogen.sh trunk/geanylatex/configure.in trunk/geanylatex/datatypes.h trunk/geanylatex/geanylatex.c trunk/geanylatex/indent-all.sh trunk/geanylatex/install-sh trunk/geanylatex/latexencodings.c trunk/geanylatex/latexencodings.h trunk/geanylatex/letters.c trunk/geanylatex/letters.h trunk/geanylatex/ltmain.sh trunk/geanylatex/makefile.win32 trunk/geanylatex/missing
Added: trunk/geanylatex/COPYING =================================================================== --- trunk/geanylatex/COPYING (rev 0) +++ trunk/geanylatex/COPYING 2008-06-16 22:18:07 UTC (rev 67) @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License.
Added: trunk/geanylatex/ChangeLog =================================================================== --- trunk/geanylatex/ChangeLog (rev 0) +++ trunk/geanylatex/ChangeLog 2008-06-16 22:18:07 UTC (rev 67) @@ -0,0 +1,3 @@ +2008-06-17 Frank Lanitz <frank(at)frank(dot)uvena(dot)de> + + * Moved plugin to geany-plugin svn.
Added: trunk/geanylatex/INSTALL =================================================================== --- trunk/geanylatex/INSTALL (rev 0) +++ trunk/geanylatex/INSTALL 2008-06-16 22:18:07 UTC (rev 67) @@ -0,0 +1,26 @@ +These installation instructions are written for a Linux system. + +At the time of this writing, building the plugin requires a recent SVN checkout +of the Geany sources (r2350). + +In order to build the plugin, the makefile needs to know where it can find +the Geany header files - you can do this by calling configure with with-geany-src +option for instance: + + % configure + % make + % make install + +The "make install" command copies geanylatex.so to your personal ~/.geany/plugins/ +directory, so you don't need to be root to install. ( If you are logged in as +root when you install, it will only put the files in /root/.geany/plugins/ +which might not be what you expected! ) + +If you actually do want everyone on the system to be able to access to the +same copy of the plugin, you can manually copy the plugin to the system-wide +plugins directory. +( That would probably be /usr/local/lib/geany/ or maybe /usr/lib/geany/ ) + +There is no "make uninstall" target, so if you want to remove the plugin, +just delete the "geanylatex.so" from your plugins directory. By now, no +other files were created directly by the plugin.
Added: trunk/geanylatex/Makefile.am =================================================================== --- trunk/geanylatex/Makefile.am (rev 0) +++ trunk/geanylatex/Makefile.am 2008-06-16 22:18:07 UTC (rev 67) @@ -0,0 +1,17 @@ +## Makefile.am -- Process this file with automake to produce Makefile.in +#SUBDIRS = tests + +noinst_HEADERS = makefile.win32 + +lib_LTLIBRARIES = geanylatex.la +geanylatex_la_SOURCES = geanylatex.c letters.c latexencodings.c +geanylatex_la_LDFLAGS = -module -avoid-version +geanylatex_la_LIBADD = @GEANY_LIBS@ + +AM_CPPFLAGS = @GEANY_CFLAGS@ -DGEANY_DISABLE_DEPRECATED + +GEANY_DIR = $(shell geany --print-prefix | grep lib) + +install: .libs/$(PACKAGE).so + mkdir -p $(DESTDIR)$(GEANY_DIR)/geany + cp $< $(DESTDIR)$(GEANY_DIR)/geany/
Added: trunk/geanylatex/THANKS =================================================================== --- trunk/geanylatex/THANKS (rev 0) +++ trunk/geanylatex/THANKS 2008-06-16 22:18:07 UTC (rev 67) @@ -0,0 +1,7 @@ +What's this file about? +----------------------- +This file lists all external people that have contributed to this project. + +Yura Siamashka <yurand2(at)gmail(dot)com> +Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com> +Enrico Troeger <enrico(dot)troeger(at)uvena(dot)de>
Added: trunk/geanylatex/TODO =================================================================== --- trunk/geanylatex/TODO (rev 0) +++ trunk/geanylatex/TODO 2008-06-16 22:18:07 UTC (rev 67) @@ -0,0 +1,27 @@ + TODO +************ + + ROADMAP/TODO +********************* + +for 0.3 +* Little bibTeX-Support + * Parsing of *.bib + * Inserting of \cite +* Adding support for diff. letter classes +* Parsing of LaTeX-documents for better support of \ref{} +* Replacing of environments + +for 0.4 +* Parsing document for »TOC« + * Navigation throught document + * "Graphical" support while using \ref, \pageref ... + + + UNSCHEDULED +******************** + +* Make plugin use customizahle templates +* Code examples for very common problems +* Some I18n work +* Make special characters extensible through files
Added: trunk/geanylatex/autogen.sh =================================================================== --- trunk/geanylatex/autogen.sh (rev 0) +++ trunk/geanylatex/autogen.sh 2008-06-16 22:18:07 UTC (rev 67) @@ -0,0 +1,159 @@ +#!/bin/sh +# Run this to generate all the initial makefiles, etc. + +srcdir=`dirname $0` +test -z "$srcdir" && srcdir=. + +DIE=0 + +if [ -n "$GNOME2_DIR" ]; then + ACLOCAL_FLAGS="-I $GNOME2_DIR/share/aclocal $ACLOCAL_FLAGS" + LD_LIBRARY_PATH="$GNOME2_DIR/lib:$LD_LIBRARY_PATH" + PATH="$GNOME2_DIR/bin:$PATH" + export PATH + export LD_LIBRARY_PATH +fi + +(test -f $srcdir/configure.in) || { + echo -n "**Error**: Directory "`$srcdir'" does not look like the" + echo " top-level package directory" + exit 1 +} + +(autoconf --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "**Error**: You must have `autoconf' installed." + echo "Download the appropriate package for your distribution," + echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" + DIE=1 +} + +(grep "^AC_PROG_INTLTOOL" $srcdir/configure.in >/dev/null) && { + (intltoolize --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "**Error**: You must have `intltool' installed." + echo "You can get it from:" + echo " ftp://ftp.gnome.org/pub/GNOME/" + DIE=1 + } +} + +(grep "^AM_PROG_XML_I18N_TOOLS" $srcdir/configure.in >/dev/null) && { + (xml-i18n-toolize --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "**Error**: You must have `xml-i18n-toolize' installed." + echo "You can get it from:" + echo " ftp://ftp.gnome.org/pub/GNOME/" + DIE=1 + } +} + +(grep "^AM_PROG_LIBTOOL" $srcdir/configure.in >/dev/null) && { + (libtool --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "**Error**: You must have `libtool' installed." + echo "You can get it from: ftp://ftp.gnu.org/pub/gnu/" + DIE=1 + } +} + +(grep "^AM_GLIB_GNU_GETTEXT" $srcdir/configure.in >/dev/null) && { + (grep "sed.*POTFILES" $srcdir/configure.in) > /dev/null || \ + (glib-gettextize --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "**Error**: You must have `glib' installed." + echo "You can get it from: ftp://ftp.gtk.org/pub/gtk" + DIE=1 + } +} + +(automake --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "**Error**: You must have `automake' installed." + echo "You can get it from: ftp://ftp.gnu.org/pub/gnu/" + DIE=1 + NO_AUTOMAKE=yes +} + + +# if no automake, don't bother testing for aclocal +test -n "$NO_AUTOMAKE" || (aclocal --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "**Error**: Missing `aclocal'. The version of `automake'" + echo "installed doesn't appear recent enough." + echo "You can get automake from ftp://ftp.gnu.org/pub/gnu/" + DIE=1 +} + +if test "$DIE" -eq 1; then + exit 1 +fi + +if test -z "$*"; then + echo "**Warning**: I am going to run `configure' with no arguments." + echo "If you wish to pass any to it, please specify them on the" + echo `$0'" command line." + echo +fi + +case $CC in +xlc ) + am_opt=--include-deps;; +esac + +for coin in `find $srcdir -path $srcdir/CVS -prune -o -name configure.in -print` +do + dr=`dirname $coin` + if test -f $dr/NO-AUTO-GEN; then + echo skipping $dr -- flagged as no auto-gen + else + echo processing $dr + ( cd $dr + + aclocalinclude="$ACLOCAL_FLAGS" + + if grep "^AM_GLIB_GNU_GETTEXT" configure.in >/dev/null; then + echo "Creating $dr/aclocal.m4 ..." + test -r $dr/aclocal.m4 || touch $dr/aclocal.m4 + echo "Running glib-gettextize... Ignore non-fatal messages." + echo "no" | glib-gettextize --force --copy + echo "Making $dr/aclocal.m4 writable ..." + test -r $dr/aclocal.m4 && chmod u+w $dr/aclocal.m4 + fi + if grep "^AC_PROG_INTLTOOL" configure.in >/dev/null; then + echo "Running intltoolize..." + intltoolize --copy --force --automake + fi + if grep "^AM_PROG_XML_I18N_TOOLS" configure.in >/dev/null; then + echo "Running xml-i18n-toolize..." + xml-i18n-toolize --copy --force --automake + fi + if grep "^AM_PROG_LIBTOOL" configure.in >/dev/null; then + if test -z "$NO_LIBTOOLIZE" ; then + echo "Running libtoolize..." + libtoolize --force --copy + fi + fi + echo "Running aclocal $aclocalinclude ..." + aclocal $aclocalinclude + if grep "^AM_CONFIG_HEADER" configure.in >/dev/null; then + echo "Running autoheader..." + autoheader + fi + echo "Running automake --gnu $am_opt ..." + automake --add-missing --gnu $am_opt + echo "Running autoconf ..." + autoconf + ) + fi +done + +conf_flags="--enable-maintainer-mode" + +if test x$NOCONFIGURE = x; then + echo Running $srcdir/configure $conf_flags "$@" ... + $srcdir/configure $conf_flags "$@" \ + && echo Now type `make' to compile. || exit 1 +else + echo Skipping configure process. +fi
Property changes on: trunk/geanylatex/autogen.sh ___________________________________________________________________ Name: svn:executable + *
Added: trunk/geanylatex/configure.in =================================================================== --- trunk/geanylatex/configure.in (rev 0) +++ trunk/geanylatex/configure.in 2008-06-16 22:18:07 UTC (rev 67) @@ -0,0 +1,17 @@ +dnl Process this file with autoconf to produce a configure script. + +AC_PREREQ(2.59) + +AC_INIT([geanylatex], [0.2-dev], [frank@frank.uvena.de]) + +AM_INIT_AUTOMAKE([1.9 foreign]) + +AC_PROG_CC +AC_PROG_LIBTOOL + +PKG_CHECK_MODULES(GEANY, [geany >= 0.15]) +AC_SUBST(GEANY_CFLAGS) +AC_SUBST(GEANY_LIBS) + +AC_CONFIG_FILES([Makefile]) +AC_OUTPUT
Added: trunk/geanylatex/datatypes.h =================================================================== --- trunk/geanylatex/datatypes.h (rev 0) +++ trunk/geanylatex/datatypes.h 2008-06-16 22:18:07 UTC (rev 67) @@ -0,0 +1,40 @@ +/* + * datatypes.h + * + * Copyright 2008 Frank Lanitz <frank(at)frank(dot)uvena(dot)de> + * + * 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., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + */ + +#ifndef DATATYPES_H +#define DATATYPES_H + +typedef struct +{ + gint cat; + gchar *label; + gchar *latex; +} SubMenuTemplate; + + +typedef struct +{ + gint cat; + gchar *label; + gboolean sorted; +} CategoryName; + +#endif
Added: trunk/geanylatex/geanylatex.c =================================================================== --- trunk/geanylatex/geanylatex.c (rev 0) +++ trunk/geanylatex/geanylatex.c 2008-06-16 22:18:07 UTC (rev 67) @@ -0,0 +1,862 @@ +/* + * geanylatex.c - Plugin to let Geany better work together with LaTeX + * + * Copyright 2007-2008 Frank Lanitz <frank(at)frank(dot)uvena(dot)de> + * For long list of friendly supporters please have a look at THANKS. + * + * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/* LaTeX plugin */ +/* This plugin improves the work with LaTeX and Geany.*/ + +#include "geany.h" +#include "support.h" +#include "plugindata.h" +#include "document.h" +#include "filetypes.h" +#include "templates.h" +#include "utils.h" +#include "ui_utils.h" +#include "keybindings.h" +#include "prefs.h" +#include "pluginmacros.h" + +#include "datatypes.h" +#include "letters.h" +#include "latexencodings.h" + +typedef void (*SubMenuCallback) (G_GNUC_UNUSED GtkMenuItem * menuitem, G_GNUC_UNUSED gpointer gdata); + +PluginInfo *plugin_info; +PluginFields *plugin_fields; +GeanyData *geany_data; +GeanyFunctions *geany_functions; + + +PLUGIN_VERSION_CHECK(68) +PLUGIN_SET_INFO(_("LaTeX"), _("Plugin to make Geany better support LaTeX"), "0.2-dev", + "Frank Lanitz frank@frank.uvena.de") + +GtkWidget *menu_latex = NULL; +GtkWidget *menu_latex_menu = NULL; +GtkWidget *menu_latex_wizzard = NULL; +GtkWidget *menu_latex_menu_special_char = NULL; +GtkWidget *menu_latex_menu_special_char_submenu = NULL; +GtkWidget *menu_latex_ref = NULL; +GtkWidget *menu_latex_label = NULL; + +/* Doing some basic keybinding stuff */ +enum +{ + LATEX_WIZZARD_KB, + LATEX_INSERT_LABEL_KB, + LATEX_INSERT_REF_KB, + COUNT_KB +}; + +PLUGIN_KEY_GROUP(geanylatex, COUNT_KB) + + +#define TEMPLATE_LATEX "\ +\documentclass[{CLASSOPTION}]{{DOCUMENTCLASS}}\n\ +{ENCODING}\ +{TITLE}\ +{AUTHOR}\ +{DATE}\ +\begin{document}\n\ +\n\ +\end{document}\n" + +#define create_sub_menu(base_menu, menu, item, title) \ + (menu) = gtk_menu_new(); \ + (item) = gtk_menu_item_new_with_mnemonic((title)); \ + gtk_menu_item_set_submenu(GTK_MENU_ITEM((item)), (menu)); \ + gtk_container_add(GTK_CONTAINER(base_menu), (item)); \ + gtk_widget_show((item)); + +#define MAX_MENU_ENTRIES 20 + +static void +insert_string(gchar *string) +{ + gint idx = p_document->get_cur_idx(); + if (DOC_IDX_VALID(idx)) + { + gint pos = p_sci->get_current_position(documents[idx]->sci); + p_sci->insert_text(documents[idx]->sci, pos, string); + } +} + + +inline gchar* +get_latex_command(gint tab_index) +{ + return char_array[tab_index].latex; +} + +static void +char_insert_activated(G_GNUC_UNUSED GtkMenuItem * menuitem, G_GNUC_UNUSED gpointer gdata) +{ + insert_string(get_latex_command(GPOINTER_TO_INT(gdata))); +} + +static void +insert_label_activated(G_GNUC_UNUSED GtkMenuItem * menuitem, G_GNUC_UNUSED gpointer gdata) +{ + GtkWidget *dialog = NULL; + GtkWidget *vbox = NULL; + GtkWidget *label = NULL; + GtkWidget *textbox_label = NULL; + GtkWidget *table = NULL; + + dialog = gtk_dialog_new_with_buttons(_("Insert label"), + GTK_WINDOW(main_widgets->window), + GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, + GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, + NULL); + vbox = p_ui->dialog_vbox_new(GTK_DIALOG(dialog)); + gtk_widget_set_name(dialog, "GeanyDialog"); + gtk_box_set_spacing(GTK_BOX(vbox), 10); + + table = gtk_table_new(1, 2, FALSE); + gtk_table_set_col_spacings(GTK_TABLE(table), 6); + gtk_table_set_row_spacings(GTK_TABLE(table), 6); + + label = gtk_label_new(_("Label name:")); + textbox_label = gtk_entry_new(); + + gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); + + gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 0, 1); + gtk_table_attach_defaults(GTK_TABLE(table), textbox_label, 1, 2, 0, 1); + gtk_container_add(GTK_CONTAINER(vbox), table); + + gtk_widget_show_all(vbox); + + if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) + { + gchar *label_str = NULL; + label_str = g_strconcat("\label{", g_strdup(gtk_entry_get_text(GTK_ENTRY(textbox_label))), "}", NULL); + insert_string(label_str); + } + gtk_widget_destroy(dialog); +} + +static void +insert_ref_activated(G_GNUC_UNUSED GtkMenuItem * menuitem, G_GNUC_UNUSED gpointer gdata) +{ + GtkWidget *dialog; + GtkWidget *vbox = NULL; + GtkWidget *label_ref = NULL; + GtkWidget *textbox_ref = NULL; + GtkWidget *table = NULL; + GtkWidget *radio1 = NULL; + GtkWidget *radio2 = NULL; + + dialog = gtk_dialog_new_with_buttons(_("Insert reference"), + GTK_WINDOW(main_widgets->window), + GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, + GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, + NULL); + vbox = p_ui->dialog_vbox_new(GTK_DIALOG(dialog)); + gtk_widget_set_name(dialog, "GeanyDialog"); + gtk_box_set_spacing(GTK_BOX(vbox), 10); + + table = gtk_table_new(1, 2, FALSE); + gtk_table_set_col_spacings(GTK_TABLE(table), 6); + gtk_table_set_row_spacings(GTK_TABLE(table), 6); + + label_ref = gtk_label_new(_("Ref name:")); + textbox_ref = gtk_entry_new(); + + gtk_misc_set_alignment(GTK_MISC(label_ref), 0, 0.5); + + gtk_table_attach_defaults(GTK_TABLE(table), label_ref, 0, 1, 0, 1); + gtk_table_attach_defaults(GTK_TABLE(table), textbox_ref, 1, 2, 0, 1); + gtk_container_add(GTK_CONTAINER(vbox), table); + + radio1 = gtk_radio_button_new_with_label(NULL, + _("standard reference")); + gtk_button_set_focus_on_click(GTK_BUTTON(radio1), FALSE); + gtk_container_add(GTK_CONTAINER(vbox), radio1); + + radio2 = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(radio1), + _("page reference")); + gtk_button_set_focus_on_click(GTK_BUTTON(radio2), FALSE); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio2), FALSE); + gtk_container_add(GTK_CONTAINER(vbox), radio2); + + gtk_widget_show_all(vbox); + + + if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) + { + gchar *ref_string = NULL; + + ref_string = g_strdup(gtk_entry_get_text(GTK_ENTRY(textbox_ref))); + + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radio2)) == FALSE) + { + ref_string = g_strconcat("\ref{", ref_string, "}", NULL); + } + else + { + ref_string = g_strconcat("\pageref{", ref_string, "}", NULL); + } + + if (ref_string != NULL) + { + insert_string(ref_string); + g_free(ref_string); + } + } + + gtk_widget_destroy(dialog); +} + +static void character_create_menu_item(GtkWidget *menu, const gchar *label, gint letter, SubMenuCallback callback) +{ + GtkWidget *tmp; + + tmp = gtk_menu_item_new_with_label(label); + gtk_widget_show(tmp); + gtk_container_add(GTK_CONTAINER(menu), tmp); + g_signal_connect((gpointer) tmp, "activate", G_CALLBACK(callback), GINT_TO_POINTER(letter)); +} + +/* returns -1, if there are more than gint can work with or any other error + * returns 0, if categorie is empty + * if gint categorie is -1, function will count every element. + * Useful, if there is no need for a categorie check.*/ +gint +count_menu_entries(SubMenuTemplate *tmp, gint categorie) +{ + // TODO: Reset max value for to stop before it's too late + gint i; + gint count = 0; + if (categorie == -1) + { + for (i =1; tmp[i].label != NULL; i++) + { + count = count + 1; + } + } + else + { + for (i = 1; tmp[i].label != NULL; i++) + { + if (tmp[i].cat == categorie) + { + count = count + 1; + } + if (i >= 256) + { + count = -1; + break; + } + } + } + return count; +} + +gint +count_menu_cat_entries(CategoryName *tmp) +{ + gint i; + + for (i = 0; tmp[i].label != NULL; i++); + return i; +} + +void sub_menu_init(GtkWidget *base_menu, SubMenuTemplate *menu_template, CategoryName *category_name, SubMenuCallback callback_function) +{ + gint i; + gint j; + gint max_menu_entries = MAX_MENU_ENTRIES; + gint categories = count_menu_cat_entries(category_name); + GtkWidget *sub_menu = NULL; + GtkWidget *sub_menu_cat[categories][2]; + GtkWidget *active_submenu = NULL; + + // Creates sub menus based on information from letter.h + for (i = 0; i < categories; i++) + { + if (count_menu_entries(menu_template, i) > 0) + { + create_sub_menu(base_menu, sub_menu_cat[i][0], + sub_menu_cat[i][1], category_name[i].label); + } + } + + // Searching for all categories + for (i = 0; i < categories; i++) + { + gboolean split = FALSE; + gboolean last_sub_menu = FALSE; + gboolean sorted = category_name[i].sorted; + gint local_count = 0; // To check whether we need to build up a new sub sub menu. + gint item_count = count_menu_entries(menu_template, i); + + if (item_count < 1) + continue; + + // Default is, not to split anything to make menu not + // deeper than realy needed. + if (item_count > max_menu_entries) + { + split = TRUE; + } + + // Setting active sub menu to sub menu of catagorie + sub_menu = sub_menu_cat[i][0]; + active_submenu = sub_menu; + // Finding entries for each categorie + + for (j = 0; menu_template[j].latex != NULL; j++) + { + if (menu_template[j].cat == i) + { + // Creates a new sub sub menu if needed + if (split == TRUE && (local_count % max_menu_entries) == 0) + { + gint next_split_point = 0; + GtkWidget *tmp = NULL; + GtkWidget *tmp_item = NULL; + + sub_menu = active_submenu; + + for (next_split_point = 0; + next_split_point < max_menu_entries ; next_split_point ++) + { + if (menu_template[j+next_split_point].cat != i) + { + last_sub_menu = TRUE; + break; + } + + } + + if (sorted == TRUE) + { + create_sub_menu(sub_menu_cat[i][0], tmp, tmp_item, g_strconcat(menu_template[j].label, " ... ", menu_template[j + next_split_point-1].label, NULL)); + + sub_menu = tmp; + } + else if (sorted == FALSE) + { + if (last_sub_menu == FALSE) + { + create_sub_menu(sub_menu, tmp, tmp_item, _("More")); + sub_menu = active_submenu; + active_submenu = tmp; + } + } + } + + // Sets the counter to keep in track if a new submenu needs to be build up + local_count = local_count + 1; + character_create_menu_item(sub_menu, g_strconcat(menu_template[j].label, "\t", menu_template[j].latex, NULL), j, callback_function); + } + } + } +} + +static int +find_latex_enc(gint l_geany_enc) +{ + guint i; + for (i = 0; i < LATEX_ENCODINGS_MAX; i++) + { + if (latex_encodings[i].geany_enc == l_geany_enc) + return i; + } + return LATEX_ENCODING_NONE; +} + + +static void +show_output(const gchar * output, const gchar * name, const gint local_enc) +{ + gint idx; + GeanyFiletype *ft = p_filetypes->lookup_by_name("LaTeX"); + + if (output) + { + idx = p_document->new_file(name, ft, output); + p_document->set_encoding(idx, p_encodings->get_charset_from_index(latex_encodings[local_enc].geany_enc)); + } + +} + +static void +wizard_activated(G_GNUC_UNUSED GtkMenuItem * menuitem, G_GNUC_UNUSED gpointer gdata) +{ + gint i; + GString *code = NULL; + gchar *author = NULL; + gchar *date = NULL; + gchar *output = NULL; + gchar *classoptions = NULL; + gchar *title = NULL; + gchar *enc_latex_char = NULL; + gchar *documentclass_str = NULL; + gchar *papersize = NULL; + gchar *draft = NULL; + gchar *scriptsize = NULL; + gint documentclass_int; + gint encoding_int; + gint papersize_int; + gint scriptsize_int; + GtkWidget *dialog = NULL; + GtkWidget *vbox = NULL; + GtkWidget *label_documentclass = NULL; + GtkWidget *documentclass_combobox = NULL; + GtkWidget *label_encoding = NULL; + GtkWidget *encoding_combobox = NULL; + GtkWidget *scriptsize_combobox = NULL; + GtkWidget *label_scriptsize = NULL; + GtkWidget *table = NULL; + GtkWidget *checkbox_KOMA = NULL; + GtkWidget *author_textbox = NULL; + GtkWidget *label_author = NULL; + GtkWidget *date_textbox = NULL; + GtkWidget *label_date = NULL; + GtkWidget *title_textbox = NULL; + GtkWidget *label_title = NULL; + GtkWidget *papersize_combobox = NULL; + GtkWidget *label_papersize = NULL; + GtkWidget *checkbox_draft = NULL; + gboolean KOMA_active = TRUE; + gboolean draft_active = FALSE; + + GtkTooltips *tooltip = NULL; + + tooltip = gtk_tooltips_new(); + + // Creating and formating table + table = gtk_table_new(2, 6, FALSE); + gtk_table_set_col_spacings(GTK_TABLE(table), 6); + gtk_table_set_row_spacings(GTK_TABLE(table), 6); + + // Documentclass + label_documentclass = gtk_label_new(_("Documentclass:")); + documentclass_combobox = gtk_combo_box_new_text(); + gtk_tooltips_set_tip(tooltip, documentclass_combobox, + _("Chooce the kind of document you want to write"), NULL); + gtk_combo_box_insert_text(GTK_COMBO_BOX(documentclass_combobox), 0, "Book"); + gtk_combo_box_insert_text(GTK_COMBO_BOX(documentclass_combobox), 1, "Article"); + gtk_combo_box_insert_text(GTK_COMBO_BOX(documentclass_combobox), 2, "Report"); + + gtk_combo_box_set_active(GTK_COMBO_BOX(documentclass_combobox), 0); + + gtk_misc_set_alignment(GTK_MISC(label_documentclass), 0, 0.5); + + gtk_table_attach_defaults(GTK_TABLE(table), label_documentclass, 0, 1, 0, 1); + gtk_table_attach_defaults(GTK_TABLE(table), documentclass_combobox, 1, 2, 0, 1); + + // Encoding + label_encoding = gtk_label_new(_("Encoding:")); + + encoding_combobox = gtk_combo_box_new_text(); + gtk_tooltips_set_tip(tooltip, encoding_combobox, + _("Set the encoding for your new document"), NULL); + for (i = 0; i < LATEX_ENCODINGS_MAX; i++) + { + gtk_combo_box_insert_text(GTK_COMBO_BOX(encoding_combobox), i, + latex_encodings[i].name); + } + + gtk_combo_box_set_active(GTK_COMBO_BOX(encoding_combobox), find_latex_enc(geany_data->file_prefs->default_new_encoding)); + + gtk_misc_set_alignment(GTK_MISC(label_encoding), 0, 0.5); + + gtk_table_attach_defaults(GTK_TABLE(table), label_encoding, 0, 1, 1, 2); + gtk_table_attach_defaults(GTK_TABLE(table), encoding_combobox, 1, 2, 1, 2); + + // Scriptsize + label_scriptsize = gtk_label_new(_("Scriptsize:")); + scriptsize_combobox = gtk_combo_box_new_text(); + gtk_tooltips_set_tip(tooltip, scriptsize_combobox, + _("Set the default script size of your new document"), NULL); + gtk_combo_box_insert_text(GTK_COMBO_BOX(scriptsize_combobox), 0, "10pt"); + gtk_combo_box_insert_text(GTK_COMBO_BOX(scriptsize_combobox), 1, "11pt"); + gtk_combo_box_insert_text(GTK_COMBO_BOX(scriptsize_combobox), 2, "12pt"); + + gtk_combo_box_set_active(GTK_COMBO_BOX(scriptsize_combobox), 0); + + gtk_misc_set_alignment(GTK_MISC(label_scriptsize), 0, 0.5); + + gtk_table_attach_defaults(GTK_TABLE(table), label_scriptsize, 0, 1, 2, 3); + gtk_table_attach_defaults(GTK_TABLE(table), scriptsize_combobox, 1, 2, 2, 3); + + // Author + label_author = gtk_label_new(_("Author:")); + author_textbox = gtk_entry_new(); + gtk_tooltips_set_tip(tooltip, author_textbox, + _("Sets the entry of \author command. In most cases here should stay your name"), NULL); + if (geany_data->template_prefs->developer != NULL) + { + author = geany_data->template_prefs->developer; + gtk_entry_set_text(GTK_ENTRY(author_textbox), author); + } + gtk_misc_set_alignment(GTK_MISC(label_author), 0, 0.5); + gtk_table_attach_defaults(GTK_TABLE(table), label_author, 0, 1, 3, 4); + gtk_table_attach_defaults(GTK_TABLE(table), author_textbox, 1, 2, 3, 4); + + // Date + label_date = gtk_label_new(_("Date:")); + date_textbox = gtk_entry_new(); + gtk_tooltips_set_tip(tooltip, date_textbox, + _("Sets the entry of the \date command inside header of your newly created LaTeX-document. Keeping it at \today is a good decision if you don't need any fixed date."), NULL); + gtk_entry_set_text(GTK_ENTRY(date_textbox), "\today"); + gtk_misc_set_alignment(GTK_MISC(label_date), 0, 0.5); + gtk_table_attach_defaults(GTK_TABLE(table), label_date, 0, 1, 4, 5); + gtk_table_attach_defaults(GTK_TABLE(table), date_textbox, 1, 2, 4, 5); + + // Title of the new document + label_title = gtk_label_new(_("Title:")); + title_textbox = gtk_entry_new(); + gtk_tooltips_set_tip(tooltip, title_textbox, _("Sets the title of your newly document."), + NULL); + gtk_misc_set_alignment(GTK_MISC(label_title), 0, 0.5); + gtk_table_attach_defaults(GTK_TABLE(table), label_title, 0, 1, 5, 6); + gtk_table_attach_defaults(GTK_TABLE(table), title_textbox, 1, 2, 5, 6); + + // Papersize + label_papersize = gtk_label_new(_("Paper size:")); + papersize_combobox = gtk_combo_box_new_text(); + gtk_tooltips_set_tip(tooltip, papersize_combobox, + _("Chooce the paper format for the new created document"), NULL); + gtk_combo_box_insert_text(GTK_COMBO_BOX(papersize_combobox), 0, "A4"); + gtk_combo_box_insert_text(GTK_COMBO_BOX(papersize_combobox), 1, "A5"); + gtk_combo_box_insert_text(GTK_COMBO_BOX(papersize_combobox), 2, "A6"); + + gtk_combo_box_set_active(GTK_COMBO_BOX(papersize_combobox), 0); + + gtk_misc_set_alignment(GTK_MISC(label_papersize), 0, 0.5); + + gtk_table_attach_defaults(GTK_TABLE(table), label_papersize, 0, 1, 6, 7); + gtk_table_attach_defaults(GTK_TABLE(table), papersize_combobox, 1, 2, 6, 7); + + gtk_widget_show_all(table); + + // Buidling the wizard-dialog and showing it + dialog = gtk_dialog_new_with_buttons(_("LaTeX-Wizard"), + GTK_WINDOW(main_widgets->window), + GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, + GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, + NULL); + vbox = p_ui->dialog_vbox_new(GTK_DIALOG(dialog)); + gtk_widget_set_name(dialog, "GeanyDialog"); + gtk_box_set_spacing(GTK_BOX(vbox), 10); + gtk_container_add(GTK_CONTAINER(vbox), table); + + checkbox_KOMA = gtk_check_button_new_with_label(_("Use KOMA-script classes if possible")); + gtk_tooltips_set_tip(tooltip, checkbox_KOMA, + _ + ("Uses the KOMA-script classes by Markus Kohm.\nKeep in mind: To compile your document these classes have to been installed before."), + NULL); + gtk_button_set_focus_on_click(GTK_BUTTON(checkbox_KOMA), FALSE); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbox_KOMA), KOMA_active); + gtk_box_pack_start(GTK_BOX(vbox), checkbox_KOMA, FALSE, FALSE, 5); + + checkbox_draft = gtk_check_button_new_with_label(_("Use draft mode")); + gtk_tooltips_set_tip(tooltip, checkbox_draft, + _("Set the draft flag inside new created documents to get documents with a number of debugging helpers"), NULL); + gtk_button_set_focus_on_click(GTK_BUTTON(checkbox_draft), FALSE); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbox_draft), draft_active); + gtk_box_pack_start(GTK_BOX(vbox), checkbox_draft, FALSE, FALSE, 5); + + gtk_widget_show_all(vbox); + + if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) + { + KOMA_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbox_KOMA)); + draft_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbox_draft)); + documentclass_int = gtk_combo_box_get_active(GTK_COMBO_BOX(documentclass_combobox)); + encoding_int = gtk_combo_box_get_active(GTK_COMBO_BOX(encoding_combobox)); + enc_latex_char = g_strconcat("\usepackage[", latex_encodings[encoding_int].latex,"]{inputenc}\n", NULL); + author = g_strdup(gtk_entry_get_text(GTK_ENTRY(author_textbox))); + date = g_strdup(gtk_entry_get_text(GTK_ENTRY(date_textbox))); + title = g_strdup(gtk_entry_get_text(GTK_ENTRY(title_textbox))); + papersize_int = gtk_combo_box_get_active(GTK_COMBO_BOX(papersize_combobox)); + switch (papersize_int) + { + case 0: + { + papersize = g_utf8_casefold("a4paper", -1); + break; + } + case 1: + { + papersize = g_utf8_casefold("a5paper", -1); + break; + } + case 2: + { + papersize = g_utf8_casefold("a6paper", -1); + break; + } + } + + scriptsize_int = gtk_combo_box_get_active(GTK_COMBO_BOX(scriptsize_combobox)); + switch (scriptsize_int) + { + case 0: + { + scriptsize = g_strconcat("10pt", NULL); + break; + } + case 1: + { + scriptsize = g_strconcat("11pt", NULL); + break; + } + case 2: + { + scriptsize = g_strconcat("12pt", NULL); + break; + } + } + + if (papersize != NULL) + { + classoptions = g_strconcat(papersize, NULL); + } + if (classoptions != NULL && draft_active == TRUE) + { + draft = g_utf8_casefold("draft", -1); + classoptions = g_strconcat(classoptions,",", draft, NULL); + } + else if (classoptions == NULL && draft_active == TRUE) + { + draft = g_utf8_casefold("draft", -1); + classoptions = g_strconcat(draft, NULL); + } + if (classoptions != NULL && scriptsize != NULL) + { + classoptions = g_strconcat(classoptions, ",", scriptsize, NULL); + } + else if (classoptions == NULL && scriptsize != NULL) + { + classoptions = g_strconcat(scriptsize, NULL); + } + + if (KOMA_active) + { + switch (documentclass_int) + { + case 0: + { + documentclass_str = g_utf8_casefold("scrbook", -1); + break; + } + case 1: + { + documentclass_str = g_utf8_casefold("scrartcl", -1); + break; + } + case 2: + { + documentclass_str = g_utf8_casefold("scrreprt", -1); + break; + } + } + } + else + { + switch (documentclass_int) + { + case 0: + { + documentclass_str = g_utf8_casefold("book", -1); + break; + } + case 1: + { + documentclass_str = g_utf8_casefold("article", -1); + break; + } + case 2: + { + documentclass_str = g_utf8_casefold("report", -1); + break; + } + } + } + + code = g_string_new(TEMPLATE_LATEX); + + if (classoptions != NULL) + { + p_utils->string_replace_all(code, "{CLASSOPTION}", classoptions); + g_free(classoptions); + } + if (documentclass_str != NULL) + { + p_utils->string_replace_all(code, "{DOCUMENTCLASS}", documentclass_str); + g_free(documentclass_str); + } + if (enc_latex_char != NULL) + { + p_utils->string_replace_all(code, "{ENCODING}", enc_latex_char); + g_free(enc_latex_char); + } + if (author != NULL) + { + if (author[0] != '\0') + { + author = g_strconcat("\author{", author, "}\n", NULL); + p_utils->string_replace_all(code, "{AUTHOR}", author); + } + else + p_utils->string_replace_all(code, "{AUTHOR}", "% \author{}\n"); + g_free(author); + } + if (date != NULL) + { + if (date[0] != '\0') + { + date = g_strconcat("\date{", date, "}\n", NULL); + p_utils->string_replace_all(code, "{DATE}", date); + } + else + p_utils->string_replace_all(code, "{DATE}", "% \date{}\n"); + g_free(date); + } + if (title != NULL) + { + if (title[0] != '\0') + { + title = g_strconcat("\title{", title, "}\n", NULL); + p_utils->string_replace_all(code, "{TITLE}", title); + } + else + p_utils->string_replace_all(code, "{TITLE}", "% \title{} \n"); + g_free(title); + } + output = g_string_free(code, FALSE); + show_output(output, NULL, encoding_int); + } + gtk_widget_destroy(dialog); +} + +static void +update_menu_items() +{ + GeanyDocument *doc = NULL; + gboolean have_file; + + doc = p_document->get_current(); + have_file = doc && doc->file_name && g_path_is_absolute(doc->file_name); + + if (have_file) + { + gtk_widget_set_sensitive(menu_latex_menu_special_char, TRUE); + gtk_widget_set_sensitive(menu_latex_ref, TRUE); + gtk_widget_set_sensitive(menu_latex_label, TRUE); + } + else + { + gtk_widget_set_sensitive(menu_latex_menu_special_char, FALSE); + gtk_widget_set_sensitive(menu_latex_ref, FALSE); + gtk_widget_set_sensitive(menu_latex_label, FALSE); + } + + gtk_widget_set_sensitive(menu_latex_wizzard, TRUE); + +} + +static void kblabel_insert(G_GNUC_UNUSED guint key_id) +{ + insert_label_activated(NULL, NULL); +} + +static void kbref_insert(G_GNUC_UNUSED guint key_id) +{ + insert_ref_activated(NULL, NULL); +} + +static void kbwizard(G_GNUC_UNUSED guint key_id) +{ + wizard_activated(NULL, NULL); +} + +void +plugin_init(G_GNUC_UNUSED GeanyData * data) +{ + GtkTooltips *tooltips = NULL; + + gchar *kblabel_insert_label = _("Insert \label"); + gchar *kblabel_insert_ref = _("Insert \ref"); + gchar *kblabel_wizard = _("Run LaTeX-Wizard"); + + init_encodings_latex(); + + tooltips = gtk_tooltips_new(); + + menu_latex = gtk_menu_item_new_with_mnemonic(_("_LaTeX")); + gtk_container_add(GTK_CONTAINER(main_widgets->tools_menu), menu_latex); + g_signal_connect((gpointer) menu_latex, "activate", G_CALLBACK(update_menu_items), NULL); + + menu_latex_menu = gtk_menu_new(); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_latex), menu_latex_menu); + + menu_latex_wizzard = gtk_menu_item_new_with_mnemonic(_("LaTeX-_Wizard")); + gtk_container_add(GTK_CONTAINER(menu_latex_menu), menu_latex_wizzard); + gtk_tooltips_set_tip(tooltips, menu_latex_wizzard, + _("Starts a Wizard to create easily LaTeX-dokuments"), NULL); + + g_signal_connect((gpointer) menu_latex_wizzard, "activate", + G_CALLBACK(wizard_activated), NULL); + + menu_latex_menu_special_char = gtk_menu_item_new_with_mnemonic(_("Insert _Special Character")); + gtk_tooltips_set_tip(tooltips, menu_latex_menu_special_char, + _("Helps to use some not very common letters and signs"), NULL); + gtk_container_add(GTK_CONTAINER(menu_latex_menu), menu_latex_menu_special_char); + + menu_latex_menu_special_char_submenu = gtk_menu_new(); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_latex_menu_special_char), menu_latex_menu_special_char_submenu); + sub_menu_init(menu_latex_menu_special_char_submenu, char_array, cat_names, char_insert_activated); + + menu_latex_ref = gtk_menu_item_new_with_mnemonic(_("Insert _Reference")); + gtk_tooltips_set_tip(tooltips, menu_latex_ref, + _("Inserting references to the document"), NULL); + gtk_container_add(GTK_CONTAINER(menu_latex_menu), menu_latex_ref); + g_signal_connect((gpointer) menu_latex_ref, "activate", G_CALLBACK(insert_ref_activated), NULL); + + menu_latex_label = gtk_menu_item_new_with_mnemonic(_("Insert _Label")); + gtk_tooltips_set_tip(tooltips, menu_latex_label, + _("Helps at inserting labels to a docuemnt"), NULL); + gtk_container_add(GTK_CONTAINER(menu_latex_menu), menu_latex_label); + g_signal_connect((gpointer) menu_latex_label, "activate", G_CALLBACK(insert_label_activated), NULL); + + /* init keybindins */ + p_keybindings->set_item(plugin_key_group, LATEX_WIZZARD_KB, kbwizard, + 0, 0, "run_latex_wizard", kblabel_wizard, menu_latex_wizzard); + p_keybindings->set_item(plugin_key_group, LATEX_INSERT_LABEL_KB, kblabel_insert, + 0, 0, "insert_latex_label", kblabel_insert_label, menu_latex_wizzard); + p_keybindings->set_item(plugin_key_group, LATEX_INSERT_REF_KB, kbref_insert, + 0, 0, "insert_latex_ref", kblabel_insert_ref, menu_latex_wizzard); + gtk_widget_show_all(menu_latex); + plugin_fields->menu_item = menu_latex; +} + +void +plugin_cleanup() +{ + gtk_widget_destroy(plugin_fields->menu_item); +}
Added: trunk/geanylatex/indent-all.sh =================================================================== --- trunk/geanylatex/indent-all.sh (rev 0) +++ trunk/geanylatex/indent-all.sh 2008-06-16 22:18:07 UTC (rev 67) @@ -0,0 +1,4 @@ +#!/bin/sh +indent -bli0 -i8 -cli8 -npcs -l100 *.c +rm *~ +
Property changes on: trunk/geanylatex/indent-all.sh ___________________________________________________________________ Name: svn:executable + *
Added: trunk/geanylatex/install-sh =================================================================== --- trunk/geanylatex/install-sh (rev 0) +++ trunk/geanylatex/install-sh 2008-06-16 22:18:07 UTC (rev 67) @@ -0,0 +1,507 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2006-10-14.15 + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. + +nl=' +' +IFS=" "" $nl" + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" +if test -z "$doit"; then + doit_exec=exec +else + doit_exec=$doit +fi + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" +mkdirprog="${MKDIRPROG-mkdir}" + +posix_glob= +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chmodcmd=$chmodprog +chowncmd= +chgrpcmd= +stripcmd= +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src= +dst= +dir_arg= +dstarg= +no_target_directory= + +usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: +-c (ignored) +-d create directories instead of installing files. +-g GROUP $chgrpprog installed files to GROUP. +-m MODE $chmodprog installed files to MODE. +-o USER $chownprog installed files to USER. +-s $stripprog installed files. +-t DIRECTORY install into DIRECTORY. +-T report an error if DSTFILE is a directory. +--help display this help and exit. +--version display version info and exit. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG +" + +while test $# -ne 0; do + case $1 in + -c) shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + shift + shift + case $mode in + *' '* | *' '* | *' +'* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -s) stripcmd=$stripprog + shift + continue;; + + -t) dstarg=$2 + shift + shift + continue;; + + -T) no_target_directory=true + shift + continue;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac +done + +if test $# -ne 0 && test -z "$dir_arg$dstarg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dstarg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dstarg" + shift # fnord + fi + shift # arg + dstarg=$arg + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call `install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + trap '(exit $?); exit' 1 2 13 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names starting with `-'. + case $src in + -*) src=./$src ;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dstarg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + + dst=$dstarg + # Protect names starting with `-'. + case $dst in + -*) dst=./$dst ;; + esac + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dstarg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + # Prefer dirname, but fall back on a substitute if dirname fails. + dstdir=` + (dirname "$dst") 2>/dev/null || + expr X"$dst" : 'X(.*[^/])//*[^/][^/]*/*$' | \ + X"$dst" : 'X(//)[^/]' | \ + X"$dst" : 'X(//)$' | \ + X"$dst" : 'X(/)' | . 2>/dev/null || + echo X"$dst" | + sed '/^X(.*[^/])//*[^/][^/]*/*$/{ + s//\1/ + q + } + /^X(//)[^/].*/{ + s//\1/ + q + } + /^X(//)$/{ + s//\1/ + q + } + /^X(/).*/{ + s//\1/ + q + } + s/.*/./; q' + ` + + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writeable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix=/ ;; + -*) prefix=./ ;; + *) prefix= ;; + esac + + case $posix_glob in + '') + if (set -f) 2>/dev/null; then + posix_glob=true + else + posix_glob=false + fi ;; + esac + + oIFS=$IFS + IFS=/ + $posix_glob && set -f + set fnord $dstdir + shift + $posix_glob && set +f + IFS=$oIFS + + prefixes= + + for d + do + test -z "$d" && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "$doit_exec $mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ + && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ + && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ + && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # Now rename the file to the real destination. + { $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null \ + || { + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + if test -f "$dst"; then + $doit $rmcmd -f "$dst" 2>/dev/null \ + || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null \ + && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }; }\ + || { + echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + else + : + fi + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + } || exit 1 + + trap '' 0 + fi +done + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End:
Property changes on: trunk/geanylatex/install-sh ___________________________________________________________________ Name: svn:executable + *
Added: trunk/geanylatex/latexencodings.c =================================================================== --- trunk/geanylatex/latexencodings.c (rev 0) +++ trunk/geanylatex/latexencodings.c 2008-06-16 22:18:07 UTC (rev 67) @@ -0,0 +1,55 @@ +/* + * latexencodings.h + * + * Copyright 2008 Frank Lanitz <frank(at)frank(dot)uvena(dot)de> + * + * 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., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + */ + +#include <gtk/gtk.h> +#include "support.h" +#include "encodings.h" +#include "latexencodings.h" + +LaTeXEncodings latex_encodings[LATEX_ENCODINGS_MAX]; + +#define fill(Charset, Name, LaTeX, GeanyEnc) \ + latex_encodings[Charset].charset = Charset; \ + latex_encodings[Charset].name = Name; \ + latex_encodings[Charset].latex = LaTeX; \ + latex_encodings[Charset].geany_enc = GeanyEnc; + +void init_encodings_latex(void) +{ + fill(LATEX_ENCODING_UTF_8, _("UTF-8"), "utf8x", GEANY_ENCODING_UTF_8); + fill(LATEX_ENCODING_ASCII, _("US-ASCII"), "ascii", GEANY_ENCODING_ISO_8859_1); + fill(LATEX_ENCODING_ISO_8859_1, _("ISO-8859-1 (Latin-1)"), "latin1", + GEANY_ENCODING_ISO_8859_1); + fill(LATEX_ENCODING_ISO_8859_2, _("ISO-8859-2 (Latin-2)"), "latin2", + GEANY_ENCODING_ISO_8859_2); + fill(LATEX_ENCODING_ISO_8859_3, _("ISO-8859-3 (Latin-3)"), "latin3", + GEANY_ENCODING_ISO_8859_3); + fill(LATEX_ENCODING_ISO_8859_4, _("ISO-8859-4 (Latin-4)"), "latin4", + GEANY_ENCODING_ISO_8859_4); + fill(LATEX_ENCODING_ISO_8859_5, _("ISO-8859-5 (Latin-5)"), "latin5", + GEANY_ENCODING_ISO_8859_5); + fill(LATEX_ENCODING_ISO_8859_9, _("ISO-8859-9 (Latin-9)"), "latin9", + GEANY_ENCODING_ISO_8859_9); + fill(LATEX_ENCODING_ISO_8859_10, _("ISO-8859-10 (Latin-10)"), "latin10", GEANY_ENCODING_ISO_8859_10); + fill(LATEX_ENCODING_IBM_850, _("IBM 850 code page"), "cp850", GEANY_ENCODING_IBM_850); + fill(LATEX_ENCODING_IBM_852, _("IBM 852 code page"), "cp852", GEANY_ENCODING_IBM_852); + fill(LATEX_ENCODING_NONE, _("Misc"), NULL, GEANY_ENCODING_NONE); +}
Added: trunk/geanylatex/latexencodings.h =================================================================== --- trunk/geanylatex/latexencodings.h (rev 0) +++ trunk/geanylatex/latexencodings.h 2008-06-16 22:18:07 UTC (rev 67) @@ -0,0 +1,56 @@ +/* + * latexencodings.h + * + * Copyright 2008 Frank Lanitz <frank(at)frank(dot)uvena(dot)de> + * + * 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., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + */ + +#ifndef LATEXEXCODINGS_H +#define LATEXEXCODINGS_H + + +typedef enum +{ + LATEX_ENCODING_UTF_8 = 0, + LATEX_ENCODING_ASCII, + LATEX_ENCODING_ISO_8859_1, + LATEX_ENCODING_ISO_8859_2, + LATEX_ENCODING_ISO_8859_3, + LATEX_ENCODING_ISO_8859_4, + LATEX_ENCODING_ISO_8859_5, + LATEX_ENCODING_ISO_8859_9, + LATEX_ENCODING_ISO_8859_10, + LATEX_ENCODING_IBM_850, + LATEX_ENCODING_IBM_852, + LATEX_ENCODING_NONE, + LATEX_ENCODINGS_MAX +} LaTeXEncodingIndex; + + +typedef struct +{ + LaTeXEncodingIndex charset; + gchar *name; + gchar *latex; + gint geany_enc; +} LaTeXEncodings; + +LaTeXEncodings latex_encodings[LATEX_ENCODINGS_MAX]; + +void init_encodings_latex(void); + +#endif
Added: trunk/geanylatex/letters.c =================================================================== --- trunk/geanylatex/letters.c (rev 0) +++ trunk/geanylatex/letters.c 2008-06-16 22:18:07 UTC (rev 67) @@ -0,0 +1,222 @@ +/* + * letters.h + * + * Copyright 2008 Frank Lanitz <frank(at)frank(dot)uvena(dot)de> + * + * 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., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + */ + +#include <gtk/gtk.h> +#include "support.h" +#include "datatypes.h" +#include "letters.h" + +enum +{ + GREEK_LETTERS = 0, + GERMAN_LETTERS, + MISC_LETTERS, + ARROW_CHAR, + RELATIONAL_SIGNS, + BINARY_OPERATIONS, + LETTERS_END +}; + +CategoryName cat_names[] = { + { GREEK_LETTERS, N_("Greek letters"), TRUE}, + { GERMAN_LETTERS, N_("German umlauts"), TRUE}, + { MISC_LETTERS, N_("Misc"), FALSE}, + { ARROW_CHAR, N_("Arrow characters"), FALSE}, + { RELATIONAL_SIGNS, N_("Relational"), FALSE}, + { BINARY_OPERATIONS, N_("Binary operation"), FALSE}, + { 0, NULL, FALSE} +}; + +/* Entries need to be sorted by categorie (1st field) or some random + * features will occure. + * AAABBBCCC is valid + * AAACCCBBB is valid + * ACABCBACB is _not_ valid and will course trouble */ +SubMenuTemplate char_array[] = { + // Greek characters + {GREEK_LETTERS, "Α", "\Alpha" }, + {GREEK_LETTERS, "α", "\alpha" }, + {GREEK_LETTERS, "Β", "\Beta" }, + {GREEK_LETTERS, "β", "\beta" }, + {GREEK_LETTERS, "Γ", "\Gamma" }, + {GREEK_LETTERS, "γ", "\gamma" }, + {GREEK_LETTERS, "Δ", "\Delta" }, + {GREEK_LETTERS, "δ", "\Delta" }, + {GREEK_LETTERS, "δ", "\delta" }, + {GREEK_LETTERS, "Ε", "\Epsilon" }, + {GREEK_LETTERS, "ε", "\epsilon" }, + {GREEK_LETTERS, "Ζ", "\Zeta" }, + {GREEK_LETTERS, "ζ", "\zeta" }, + {GREEK_LETTERS, "Η", "\Eta" }, + {GREEK_LETTERS, "η", "\eta" }, + {GREEK_LETTERS, "Θ", "\Theta" }, + {GREEK_LETTERS, "θ", "\theta" }, + {GREEK_LETTERS, "Ι", "\Iota" }, + {GREEK_LETTERS, "ι", "\iota" }, + {GREEK_LETTERS, "Κ", "\Kappa" }, + {GREEK_LETTERS, "κ", "\kappa" }, + {GREEK_LETTERS, "Λ", "\Lambda" }, + {GREEK_LETTERS, "λ", "\lambda" }, + {GREEK_LETTERS, "Μ", "\Mu" }, + {GREEK_LETTERS, "μ", "\mu" }, + {GREEK_LETTERS, "Ν", "\Nu" }, + {GREEK_LETTERS, "ν", "\nu" }, + {GREEK_LETTERS, "Ξ", "\Xi" }, + {GREEK_LETTERS, "ξ", "\xi" }, + {GREEK_LETTERS, "Ο", "\Omicron" }, + {GREEK_LETTERS, "ο", "\omicron" }, + {GREEK_LETTERS, "Π", "\Pi" }, + {GREEK_LETTERS, "π", "\pi" }, + {GREEK_LETTERS, "Ρ", "\Rho" }, + {GREEK_LETTERS, "ρ", "\rho" }, + {GREEK_LETTERS, "Σ", "\Sigma" }, + {GREEK_LETTERS, "ς", "\sigmaf" }, + {GREEK_LETTERS, "σ", "\sigma" }, + {GREEK_LETTERS, "Τ", "\Tau" }, + {GREEK_LETTERS, "τ", "\tau" }, + {GREEK_LETTERS, "Υ", "\Upsilon" }, + {GREEK_LETTERS, "υ", "\upsilon" }, + {GREEK_LETTERS, "Φ", "\Phi" }, + {GREEK_LETTERS, "φ", "\phi" }, + {GREEK_LETTERS, "Χ", "\Chi" }, + {GREEK_LETTERS, "χ", "\chi" }, + {GREEK_LETTERS, "Ψ", "\Psi" }, + {GREEK_LETTERS, "ψ", "\psi" }, + {GREEK_LETTERS, "Ω", "\Omega" }, + {GREEK_LETTERS, "ω", "\omega" }, + {GREEK_LETTERS, "ϑ", "\thetasym" }, + {GREEK_LETTERS, "ϒ", "\upsih" }, + {GREEK_LETTERS, "ϖ", "\piv" }, + + // German Umlaute + {GERMAN_LETTERS, "ä",""a"}, + {GERMAN_LETTERS, "ü",""u"}, + {GERMAN_LETTERS, "ö",""o"}, + {GERMAN_LETTERS, "ß",""s"}, + + //// Czech characters + //{"ě","\v{e}"}, + //{"š","\v{s}"}, + //{"č","\v[c}"}, + //{"ř","\v{r}"}, + //{"ž","\v{z}"}, + //{"ý",""}, + //{"á",""}, + //{"í",""}, + //{"é",""}, + //{"Ě","\v{E}"}, + //{"Š","\v{S}"}, + //{"Č","\v{C}"}, + //{"Ř","\v{R}"}, + //{"Ž","\v{Z}"}, + //{"Ý",""}, + //{"Á",""}, + //{"Í",""}, + //{"É",""}, + //// Misc + {MISC_LETTERS, "\","\backslash"}, + {MISC_LETTERS, "€", "\euro"}, + {ARROW_CHAR, "←", "\leftarrow" }, + {ARROW_CHAR, "↑", "\uparrow" }, + {ARROW_CHAR, "→", "\rightarrow" }, + {ARROW_CHAR, "↓", "\downarrow" }, + {ARROW_CHAR, "↔", "\leftrightarrow" }, + {ARROW_CHAR, "⇐", "\Leftarrow" }, + {ARROW_CHAR, "⇑", "\Uparrow" }, + {ARROW_CHAR, "⇒", "\Rightarrow" }, + {ARROW_CHAR, "⇓", "\Downarrow" }, + {ARROW_CHAR, "⇔", "\Leftrightarrow" }, + {RELATIONAL_SIGNS, "\u2264", "\leq"}, + {RELATIONAL_SIGNS, "\u2265", "\geq"}, + {RELATIONAL_SIGNS, "\u220E", "\qed"}, + {RELATIONAL_SIGNS, "\u2261", "\equiv"}, + {RELATIONAL_SIGNS, "\u22A7", "\models"}, + {RELATIONAL_SIGNS, "\u227A", "\prec"}, + {RELATIONAL_SIGNS, "\u227B", "\succ"}, + {RELATIONAL_SIGNS, "\u223C", "\sim"}, + {RELATIONAL_SIGNS, "\u27C2", "\perp"}, + {RELATIONAL_SIGNS, "\u2AAF", "\preceq"}, + {RELATIONAL_SIGNS, "\u2AB0", "\succeq"}, + {RELATIONAL_SIGNS, "\u2243", "\simeq"}, + {RELATIONAL_SIGNS, "\u2223", "\mid"}, + {RELATIONAL_SIGNS, "\u226A", "\ll"}, + {RELATIONAL_SIGNS, "\u226B", "\gg"}, + {RELATIONAL_SIGNS, "\u224D", "\asymp"}, + {RELATIONAL_SIGNS, "\u2225", "\parallel"}, + {RELATIONAL_SIGNS, "\u2282", "\subset"}, + {RELATIONAL_SIGNS, "\u2283", "\supset"}, + {RELATIONAL_SIGNS, "\u2248", "\approx"}, + {RELATIONAL_SIGNS, "\u22C8", "\bowtie"}, + {RELATIONAL_SIGNS, "\u2286", "\subseteq"}, + {RELATIONAL_SIGNS, "\u2287", "\supseteq"}, + {RELATIONAL_SIGNS, "\u2245", "\cong"}, + {RELATIONAL_SIGNS, "\u2A1D", "\Join"}, + {RELATIONAL_SIGNS, "\u228F", "\sqsubset"}, + {RELATIONAL_SIGNS, "\u2290", "\sqsupset"}, + {RELATIONAL_SIGNS, "\u2260", "\neq"}, + {RELATIONAL_SIGNS, "\u2323", "\smile"}, + {RELATIONAL_SIGNS, "\u2291", "\sqsubseteq"}, + {RELATIONAL_SIGNS, "\u2292", "\sqsupseteq"}, + {RELATIONAL_SIGNS, "\u2250", "\doteq"}, + {RELATIONAL_SIGNS, "\u2322", "\frown"}, + {RELATIONAL_SIGNS, "\u2208", "\in"}, + {RELATIONAL_SIGNS, "\u220B", "\ni"}, + {RELATIONAL_SIGNS, "\u221D", "\propto"}, + {RELATIONAL_SIGNS, "\u22A2", "\vdash"}, + {RELATIONAL_SIGNS, "\u22A3", "\dashv"}, + {BINARY_OPERATIONS, "\u00B1", "\pm"}, + {BINARY_OPERATIONS, "\u2213", "\mp"}, + {BINARY_OPERATIONS, "\u00D7", "\times"}, + {BINARY_OPERATIONS, "\u00F7", "\div"}, + {BINARY_OPERATIONS, "\u2217", "\ast"}, + {BINARY_OPERATIONS, "\u22C6", "\star"}, + {BINARY_OPERATIONS, "\u2218", "\circ"}, + {BINARY_OPERATIONS, "\u2219", "\bullet"}, + {BINARY_OPERATIONS, "\u22C5", "\cdot"}, + {BINARY_OPERATIONS, "\u2229", "\cap"}, + {BINARY_OPERATIONS, "\u222A", "\cup"}, + {BINARY_OPERATIONS, "\u228E", "\uplus"}, + {BINARY_OPERATIONS, "\u2293", "\sqcap"}, + {BINARY_OPERATIONS, "\u2228", "\vee"}, + {BINARY_OPERATIONS, "\u2227", "\wedge"}, + {BINARY_OPERATIONS, "\u2216", "\setminus"}, + {BINARY_OPERATIONS, "\u2240", "\wr"}, + {BINARY_OPERATIONS, "\u22C4", "\diamond"}, + {BINARY_OPERATIONS, "\u25B3", "\bigtriangleup"}, + {BINARY_OPERATIONS, "\u25BD", "\bigtriangledown"}, + {BINARY_OPERATIONS, "\u25C1", "\triangleleft"}, + {BINARY_OPERATIONS, "\u25B7", "\triangleright"}, + {BINARY_OPERATIONS, "", "\lhd"}, + {BINARY_OPERATIONS, "", "\rhd"}, + {BINARY_OPERATIONS, "", "\unlhd"}, + {BINARY_OPERATIONS, "", "\unrhd"}, + {BINARY_OPERATIONS, "\u2295", "\oplus"}, + {BINARY_OPERATIONS, "\u2296", "\ominus"}, + {BINARY_OPERATIONS, "\u2297", "\otimes"}, + {BINARY_OPERATIONS, "\u2205", "\oslash"}, + {BINARY_OPERATIONS, "\u2299", "\odot"}, + {BINARY_OPERATIONS, "\u25CB", "\bigcirc"}, + {BINARY_OPERATIONS, "\u2020", "\dagger"}, + {BINARY_OPERATIONS, "\u2021", "\ddagger"}, + {BINARY_OPERATIONS, "\u2A3F", "\amalg"}, + {0, NULL, NULL}, + +};
Added: trunk/geanylatex/letters.h =================================================================== --- trunk/geanylatex/letters.h (rev 0) +++ trunk/geanylatex/letters.h 2008-06-16 22:18:07 UTC (rev 67) @@ -0,0 +1,32 @@ +/* + * letters.h + * + * Copyright 2008 Frank Lanitz <frank(at)frank(dot)uvena(dot)de> + * + * 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., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + */ + + +#ifndef LETTERS_H +#define LETTER_H + +#include "datatypes.h" + +extern SubMenuTemplate char_array[]; + +extern CategoryName cat_names[]; + +#endif
Added: trunk/geanylatex/ltmain.sh =================================================================== --- trunk/geanylatex/ltmain.sh (rev 0) +++ trunk/geanylatex/ltmain.sh 2008-06-16 22:18:07 UTC (rev 67) @@ -0,0 +1,6971 @@ +# ltmain.sh - Provide generalized library-building support services. +# NOTE: Changing this file will not affect anything until you rerun configure. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# Originally by Gordon Matzigkeit gord@gnu.ai.mit.edu, 1996 +# +# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +basename="s,^.*/,,g" + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath="$0" + +# define SED for historic ltconfig's generated by Libtool 1.3 +test -z "$SED" && SED=sed + +# The name of this program: +progname=`echo "$progpath" | $SED $basename` +modename="$progname" + +# Global variables: +EXIT_SUCCESS=0 +EXIT_FAILURE=1 + +PROGRAM=ltmain.sh +PACKAGE=libtool +VERSION=1.5.22 +TIMESTAMP=" (1.1220.2.365 2005/12/18 22:14:06)" + +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes. +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi +# Same for EGREP, and just to be sure, do LTCC as well +if test "X$EGREP" = X ; then + EGREP=egrep +fi +if test "X$LTCC" = X ; then + LTCC=${CC-gcc} +fi + +# Check that we have a working $echo. +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then + # Yippee, $echo works! + : +else + # Restart under the correct shell, and then maybe $echo will work. + exec $SHELL "$progpath" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat <<EOF +$* +EOF + exit $EXIT_SUCCESS +fi + +default_mode= +help="Try `$progname --help' for more information." +magic="%%%MAGIC variable%%%" +mkdir="mkdir" +mv="mv -f" +rm="rm -f" + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed="${SED}"' -e 1s/^X//' +sed_quote_subst='s/([\`\"$\\])/\\1/g' +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + SP2NL='tr \040 \012' + NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + SP2NL='tr \100 \n' + NL2SP='tr \r\n \100\100' + ;; +esac + +# NLS nuisances. +# Only set LANG and LC_ALL to C if already set. +# These must not be set unconditionally because not all systems understand +# e.g. LANG=C (notably SCO). +# We save the old values to restore during execute mode. +if test "${LC_ALL+set}" = set; then + save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL +fi +if test "${LANG+set}" = set; then + save_LANG="$LANG"; LANG=C; export LANG +fi + +# Make sure IFS has a sensible default +lt_nl=' +' +IFS=" $lt_nl" + +if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then + $echo "$modename: not configured to build any kind of library" 1>&2 + $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit $EXIT_FAILURE +fi + +# Global variables. +mode=$default_mode +nonopt= +prev= +prevopt= +run= +show="$echo" +show_help= +execute_dlfiles= +duplicate_deps=no +preserve_args= +lo2o="s/\.lo$/.${objext}/" +o2lo="s/\.${objext}$/.lo/" + +if test -z "$max_cmd_len"; then + i=0 + testring="ABCD" + new_result= + + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while (test "X"`$SHELL $0 --fallback-echo "X$testring" 2>/dev/null` \ + = "XX$testring") >/dev/null 2>&1 && + new_result=`expr "X$testring" : ".*" 2>&1` && + max_cmd_len="$new_result" && + test "$i" != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + testring="$testring$testring" + done + testring= + # Add a significant safety factor because C++ compilers can tack on massive + # amounts of additional arguments before passing them to the linker. + # It appears as though 1/2 is a usable value. + max_cmd_len=`expr $max_cmd_len / 2` +fi + +##################################### +# Shell function definitions: +# This seems to be the best place for them + +# func_mktempdir [string] +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, STRING is the basename for that directory. +func_mktempdir () +{ + my_template="${TMPDIR-/tmp}/${1-$progname}" + + if test "$run" = ":"; then + # Return a directory name, but don't create it in dry-run mode + my_tmpdir="${my_template}-$$" + else + + # If mktemp works, use that first and foremost + my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` + + if test ! -d "$my_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + my_tmpdir="${my_template}-${RANDOM-0}$$" + + save_mktempdir_umask=`umask` + umask 0077 + $mkdir "$my_tmpdir" + umask $save_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$my_tmpdir" || { + $echo "cannot create temporary directory `$my_tmpdir'" 1>&2 + exit $EXIT_FAILURE + } + fi + + $echo "X$my_tmpdir" | $Xsed +} + + +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +func_win32_libid () +{ + win32_libid_type="unknown" + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ + $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then + win32_nmres=`eval $NM -f posix -A $1 | \ + $SED -n -e '1,100{/ I /{s,.*,import,;p;q;};}'` + case $win32_nmres in + import*) win32_libid_type="x86 archive import";; + *) win32_libid_type="x86 archive static";; + esac + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $echo $win32_libid_type +} + + +# func_infer_tag arg +# Infer tagged configuration to use if any are available and +# if one wasn't chosen via the "--tag" command line option. +# Only attempt this if the compiler in the base compile +# command doesn't match the default compiler. +# arg is usually of the form 'gcc ...' +func_infer_tag () +{ + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + case $arg in + *[[~#^&*(){}|;<>?'\ \ ]*|*]*|"") + arg=""$arg"" + ;; + esac + CC_quoted="$CC_quoted $arg" + done + case $@ in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + CC_quoted= + for arg in $CC; do + # Double-quote args containing other shell metacharacters. + case $arg in + *[[~#^&*(){}|;<>?'\ \ ]*|*]*|"") + arg=""$arg"" + ;; + esac + CC_quoted="$CC_quoted $arg" + done + # user sometimes does CC=<HOST>-gcc so we need to match that to 'gcc' + trimedcc=`echo ${CC} | $SED -e "s/${host}-//g"` + # and sometimes libtool has CC=<HOST>-gcc but user does CC=gcc + extendcc=${host}-${CC} + # and sometimes libtool has CC=<OLDHOST>-gcc but user has CC=<NEWHOST>-gcc + # (Gentoo-specific hack because we always export $CHOST) + mungedcc=${CHOST-${host}}-${trimedcc} + case "$@ " in + "cc "* | " cc "* | "${host}-cc "* | " ${host}-cc "*|\ + "gcc "* | " gcc "* | "${host}-gcc "* | " ${host}-gcc "*) + tagname=CC + break ;; + "$trimedcc "* | " $trimedcc "* | "`$echo $trimedcc` "* | " `$echo $trimedcc` "*|\ + "$extendcc "* | " $extendcc "* | "`$echo $extendcc` "* | " `$echo $extendcc` "*|\ + "$mungedcc "* | " $mungedcc "* | "`$echo $mungedcc` "* | " `$echo $mungedcc` "*|\ + " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + $echo "$modename: unable to infer tagged configuration" + $echo "$modename: specify a tag with `--tag'" 1>&2 + exit $EXIT_FAILURE +# else +# $echo "$modename: using $tagname tagged configuration" + fi + ;; + esac + fi +} + + +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ + f_ex_an_ar_dir="$1"; shift + f_ex_an_ar_oldlib="$1" + + $show "(cd $f_ex_an_ar_dir && $AR x $f_ex_an_ar_oldlib)" + $run eval "(cd $f_ex_an_ar_dir && $AR x $f_ex_an_ar_oldlib)" || exit $? + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then + : + else + $echo "$modename: ERROR: object name conflicts: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 1>&2 + exit $EXIT_FAILURE + fi +} + +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ + my_gentop="$1"; shift + my_oldlibs=${1+"$@"} + my_oldobjs="" + my_xlib="" + my_xabs="" + my_xdir="" + my_status="" + + $show "${rm}r $my_gentop" + $run ${rm}r "$my_gentop" + $show "$mkdir $my_gentop" + $run $mkdir "$my_gentop" + my_status=$? + if test "$my_status" -ne 0 && test ! -d "$my_gentop"; then + exit $my_status + fi + + for my_xlib in $my_oldlibs; do + # Extract the objects. + case $my_xlib in + [\/]* | [A-Za-z]:[\/]*) my_xabs="$my_xlib" ;; + *) my_xabs=`pwd`"/$my_xlib" ;; + esac + my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'` + my_xdir="$my_gentop/$my_xlib" + + $show "${rm}r $my_xdir" + $run ${rm}r "$my_xdir" + $show "$mkdir $my_xdir" + $run $mkdir "$my_xdir" + exit_status=$? + if test "$exit_status" -ne 0 && test ! -d "$my_xdir"; then + exit $exit_status + fi + case $host in + *-darwin*) + $show "Extracting $my_xabs" + # Do not bother doing anything if just a dry run + if test -z "$run"; then + darwin_orig_dir=`pwd` + cd $my_xdir || exit $? + darwin_archive=$my_xabs + darwin_curdir=`pwd` + darwin_base_archive=`$echo "X$darwin_archive" | $Xsed -e 's%^.*/%%'` + darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $EGREP Architectures 2>/dev/null` + if test -n "$darwin_arches"; then + darwin_arches=`echo "$darwin_arches" | $SED -e 's/.*are://'` + darwin_arch= + $show "$darwin_base_archive has multiple architectures $darwin_arches" + for darwin_arch in $darwin_arches ; do + mkdir -p "unfat-$$/${darwin_base_archive}-${darwin_arch}" + lipo -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" + cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" + func_extract_an_archive "`pwd`" "${darwin_base_archive}" + cd "$darwin_curdir" + $rm "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" + done # $darwin_arches + ## Okay now we have a bunch of thin objects, gotta fatten them up :) + darwin_filelist=`find unfat-$$ -type f -name *.o -print -o -name *.lo -print| xargs basename | sort -u | $NL2SP` + darwin_file= + darwin_files= + for darwin_file in $darwin_filelist; do + darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` + lipo -create -output "$darwin_file" $darwin_files + done # $darwin_filelist + ${rm}r unfat-$$ + cd "$darwin_orig_dir" + else + cd "$darwin_orig_dir" + func_extract_an_archive "$my_xdir" "$my_xabs" + fi # $darwin_arches + fi # $run + ;; + *) + func_extract_an_archive "$my_xdir" "$my_xabs" + ;; + esac + my_oldobjs="$my_oldobjs "`find $my_xdir -name *.$objext -print -o -name *.lo -print | $NL2SP` + done + func_extract_archives_result="$my_oldobjs" +} +# End of Shell function definitions +##################################### + +# Darwin sucks +eval std_shrext="$shrext_cmds" + +disable_libs=no + +# Parse our command line options once, thoroughly. +while test "$#" -gt 0 +do + arg="$1" + shift + + case $arg in + -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; + *) optarg= ;; + esac + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + execute_dlfiles) + execute_dlfiles="$execute_dlfiles $arg" + ;; + tag) + tagname="$arg" + preserve_args="${preserve_args}=$arg" + + # Check whether tagname contains only valid characters + case $tagname in + *[!-_A-Za-z0-9,/]*) + $echo "$progname: invalid tag name: $tagname" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + case $tagname in + CC) + # Don't test for the "default" C tag, as we know, it's there, but + # not specially marked. + ;; + *) + if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then + taglist="$taglist $tagname" + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`" + else + $echo "$progname: ignoring unknown tag $tagname" 1>&2 + fi + ;; + esac + ;; + *) + eval "$prev=$arg" + ;; + esac + + prev= + prevopt= + continue + fi + + # Have we seen a non-optional argument yet? + case $arg in + --help) + show_help=yes + ;; + + --version) + $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" + $echo + $echo "Copyright (C) 2005 Free Software Foundation, Inc." + $echo "This is free software; see the source for copying conditions. There is NO" + $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + exit $? + ;; + + --config) + ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath + # Now print the configurations for the tags. + for tagname in $taglist; do + ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath" + done + exit $? + ;; + + --debug) + $echo "$progname: enabling shell trace mode" + set -x + preserve_args="$preserve_args $arg" + ;; + + --dry-run | -n) + run=: + ;; + + --features) + $echo "host: $host" + if test "$build_libtool_libs" = yes; then + $echo "enable shared libraries" + else + $echo "disable shared libraries" + fi + if test "$build_old_libs" = yes; then + $echo "enable static libraries" + else + $echo "disable static libraries" + fi + exit $? + ;; + + --finish) mode="finish" ;; + + --mode) prevopt="--mode" prev=mode ;; + --mode=*) mode="$optarg" ;; + + --preserve-dup-deps) duplicate_deps="yes" ;; + + --quiet | --silent) + show=:
@@ Diff output truncated at 100000 characters. @@
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.